本文整理汇总了C++中close_on_exec函数的典型用法代码示例。如果您正苦于以下问题:C++ close_on_exec函数的具体用法?C++ close_on_exec怎么用?C++ close_on_exec使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了close_on_exec函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: D
static void *server_socket_thread(void * arg)
{
int serverfd, fd;
struct sockaddr addr;
socklen_t alen;
int port = (int)arg;
D("transport: server_socket_thread() starting\n");
serverfd = -1;
for(;;) {
if(serverfd == -1) {
serverfd = socket_inaddr_any_server(port, SOCK_STREAM);
if(serverfd < 0) {
D("server: cannot bind socket yet\n");
sdb_sleep_ms(1000);
continue;
}
close_on_exec(serverfd);
}
alen = sizeof(addr);
D("server: trying to get new connection from %d\n", port);
fd = sdb_socket_accept(serverfd, &addr, &alen);
if(fd >= 0) {
D("server: new connection on fd %d\n", fd);
close_on_exec(fd);
disable_tcp_nagle(fd);
register_socket_transport(fd, "host", port, 1, NULL);
}
}
D("transport: server_socket_thread() exiting\n");
return 0;
}
开发者ID:Markgorden,项目名称:SafeUSBDisk,代码行数:33,代码来源:transport_local.c
示例2: assert
void
chanfd::newfd (svccb *sbp)
{
assert (sbp->prog () == REX_PROG && sbp->proc () == REX_NEWFD);
rex_newfd_arg *argp = sbp->Xtmpl getarg<rex_newfd_arg> ();
assert (argp->channel == channo);
if (argp->fd < 0 || implicit_cast<size_t> (argp->fd) >= fdi.size ()
|| fdi[argp->fd].weof) {
warn ("newfd invalid fd %d\n", argp->fd);
sbp->replyref (rex_newfd_res (false));
return;
}
int fds[2];
if (socketpair (AF_UNIX, SOCK_STREAM, 0, fds) < 0) {
warn ("socketpair: %m\n");
sbp->replyref (rex_newfd_res (false));
return;
}
close_on_exec (fds[0]);
close_on_exec (fds[1]);
fdinfo *fdip = &fdi[argp->fd];
/* Need to make sure file descriptors get sent no later than data */
if (!fdip->fdsendq.empty ())
fdip->wuio.breakiov ();
fdip->fdsendq.push_back (fds[0]);
rex_newfd_res res (true);
*res.newfd = newfd (fds[1]);
sbp->replyref (res);
}
开发者ID:bougyman,项目名称:sfs,代码行数:32,代码来源:chan.C
示例3: assert
void
unixfd::newfd (svccb *sbp)
{
assert (paios_out);
rexcb_newfd_arg *argp = sbp->Xtmpl getarg<rexcb_newfd_arg> ();
int s[2];
if(socketpair(AF_UNIX, SOCK_STREAM, 0, s)) {
warn << "error creating socketpair";
sbp->replyref (false);
return;
}
make_async (s[1]);
make_async (s[0]);
close_on_exec (s[1]);
close_on_exec (s[0]);
paios_out->sendfd (s[1]);
vNew refcounted<unixfd> (pch, argp->newfd, s[0]);
sbp->replyref (true);
}
开发者ID:bougyman,项目名称:sfs,代码行数:25,代码来源:rexchan.C
示例4: server_socket_thread
static void server_socket_thread(void* arg) {
int serverfd, fd;
sockaddr_storage ss;
sockaddr *addrp = reinterpret_cast<sockaddr*>(&ss);
socklen_t alen;
int port = (int) (uintptr_t) arg;
adb_thread_setname("server socket");
D("transport: server_socket_thread() starting");
serverfd = -1;
for(;;) {
if(serverfd == -1) {
std::string error;
serverfd = network_inaddr_any_server(port, SOCK_STREAM, &error);
if(serverfd < 0) {
D("server: cannot bind socket yet: %s", error.c_str());
adb_sleep_ms(1000);
continue;
}
close_on_exec(serverfd);
}
alen = sizeof(ss);
D("server: trying to get new connection from %d", port);
fd = adb_socket_accept(serverfd, addrp, &alen);
if(fd >= 0) {
D("server: new connection on fd %d", fd);
close_on_exec(fd);
disable_tcp_nagle(fd);
register_socket_transport(fd, "host", port, 1);
}
}
D("transport: server_socket_thread() exiting");
}
开发者ID:debian-pkg-android-tools,项目名称:android-platform-system-core,代码行数:34,代码来源:transport_local.cpp
示例5: unix_pass_trigger
int unix_pass_trigger(const char *service, const char *buf, ssize_t len, int timeout)
{
const char *myname = "unix_pass_trigger";
int pair[2];
struct unix_pass_trigger *up;
int fd;
if (msg_verbose > 1)
msg_info("%s: service %s", myname, service);
/*
* Connect...
*/
if ((fd = unix_pass_connect(service, BLOCKING, timeout)) < 0) {
if (msg_verbose)
msg_warn("%s: connect to %s: %m", myname, service);
return (-1);
}
close_on_exec(fd, CLOSE_ON_EXEC);
/*
* Create a pipe, and send one pipe end to the server.
*/
if (pipe(pair) < 0)
msg_fatal("%s: pipe: %m", myname);
close_on_exec(pair[0], CLOSE_ON_EXEC);
close_on_exec(pair[1], CLOSE_ON_EXEC);
if (unix_send_fd(fd, pair[0]) < 0)
msg_fatal("%s: send file descriptor: %m", myname);
/*
* Stash away context.
*/
up = (struct unix_pass_trigger *) mymalloc(sizeof(*up));
up->fd = fd;
up->service = mystrdup(service);
up->pair[0] = pair[0];
up->pair[1] = pair[1];
/*
* Write the request...
*/
if (write_buf(pair[1], buf, len, timeout) < 0
|| write_buf(pair[1], "", 1, timeout) < 0)
if (msg_verbose)
msg_warn("%s: write to %s: %m", myname, service);
/*
* Wakeup when the peer disconnects, or when we lose patience.
*/
if (timeout > 0)
event_request_timer(unix_pass_trigger_event, (char *) up, timeout + 100);
event_enable_read(fd, unix_pass_trigger_event, (char *) up);
return (0);
}
开发者ID:abhai2k,项目名称:postfix-mongodb,代码行数:55,代码来源:unix_pass_trigger.c
示例6: identptr
void
identptr (int fd, callback<void, str, ptr<hostent>, int>::ref cb)
{
struct sockaddr_in la, ra;
socklen_t len;
len = sizeof (la);
bzero (&la, sizeof (la));
bzero (&ra, sizeof (ra));
errno = 0;
if (getsockname (fd, (struct sockaddr *) &la, &len) < 0
|| la.sin_family != AF_INET
|| getpeername (fd, (struct sockaddr *) &ra, &len) < 0
|| ra.sin_family != AF_INET
|| len != sizeof (la)) {
warn ("ident: getsockname/getpeername: %s\n", strerror (errno));
(*cb) ("*disconnected*", NULL, ARERR_CANTSEND);
return;
}
u_int lp = ntohs (la.sin_port);
la.sin_port = htons (0);
u_int rp = ntohs (ra.sin_port);
ra.sin_port = htons (AUTH_PORT);
int ifd = socket (AF_INET, SOCK_STREAM, 0);
if (ifd >= 0) {
close_on_exec (ifd);
make_async (ifd);
if (connect (ifd, (sockaddr *) &ra, sizeof (ra)) < 0
&& errno != EINPROGRESS) {
close (ifd);
ifd = -1;
}
}
identstat *is = New identstat;
is->err = 0;
is->cb = cb;
is->host = inet_ntoa (ra.sin_addr);
if (ifd >= 0) {
is->ncb = 2;
close_on_exec (ifd);
is->a = aios::alloc (ifd);
is->a << rp << ", " << lp << "\r\n";
is->a->settimeout (15);
is->a->readline (wrap (is, &identstat::identcb));
}
else
is->ncb = 1;
dns_hostbyaddr (ra.sin_addr, wrap (is, &identstat::dnscb));
}
开发者ID:gildafnai82,项目名称:craq,代码行数:54,代码来源:ident.C
示例7: start_logger
int
start_logger (const str &priority, const str &tag, const str &line,
const str &logfile, int flags, mode_t mode)
{
str logger;
#ifdef PATH_LOGGER
logger = PATH_LOGGER;
#endif
if (logger) {
const char *av[] = { NULL, "-p", NULL, "-t", NULL, NULL, NULL };
av[0] = const_cast<char *> (logger.cstr ());
av[2] = const_cast<char *> (priority.cstr ());
if (line)
av[5] = const_cast<char *> (line.cstr ());
else
av[5] = "log started";
if (tag)
av[4] = const_cast<char *> (tag.cstr ());
else
av[4] = "";
pid_t pid;
int status;
if ((pid = spawn (av[0], av, 0, 0, errfd)) < 0) {
warn ("%s: %m\n", logger.cstr ());
return start_log_to_file (line, logfile, flags, mode);
}
if (waitpid (pid, &status, 0) <= 0 || !WIFEXITED (status) ||
WEXITSTATUS (status))
return start_log_to_file (line, logfile, flags, mode);
int fds[2];
if (socketpair (AF_UNIX, SOCK_STREAM, 0, fds) < 0)
fatal ("socketpair: %m\n");
close_on_exec (fds[0]);
if (fds[1] != 0)
close_on_exec (fds[1]);
av[5] = NULL;
if (spawn (av[0], av, fds[1], 0, 0) >= 0) {
close (fds[1]);
return fds[0];
} else {
warn ("%s: %m\n", logger.cstr ());
}
}
return start_log_to_file (line, logfile, flags, mode);
}
开发者ID:maxtaco,项目名称:sfslite,代码行数:51,代码来源:daemonize.C
示例8: master_monitor
int master_monitor(int time_limit)
{
pid_t pid;
int pipes[2];
char buf[1];
/*
* Sanity check.
*/
if (time_limit <= 0)
msg_panic("master_monitor: bad time limit: %d", time_limit);
/*
* Set up the plumbing for child-to-parent communication.
*/
if (pipe(pipes) < 0)
msg_fatal("pipe: %m");
close_on_exec(pipes[0], CLOSE_ON_EXEC);
close_on_exec(pipes[1], CLOSE_ON_EXEC);
/*
* Fork the child, and wait for it to report successful initialization.
*/
switch (pid = fork()) {
case -1:
/* Error. */
msg_fatal("fork: %m");
case 0:
/* Child. Initialize as daemon in the background. */
close(pipes[0]);
return (pipes[1]);
default:
/* Parent. Monitor the child in the foreground. */
close(pipes[1]);
switch (timed_read(pipes[0], buf, 1, time_limit, (char *) 0)) {
default:
/* The child process still runs, but something is wrong. */
(void) kill(pid, SIGKILL);
/* FALLTHROUGH */
case 0:
/* The child process exited prematurely. */
msg_fatal("daemon initialization failure");
case 1:
/* The child process initialized successfully. */
exit(0);
}
}
}
开发者ID:Gelma,项目名称:Postfix,代码行数:48,代码来源:master_monitor.c
示例9: local_connect_arbitrary_ports
int local_connect_arbitrary_ports(int console_port, int adb_port)
{
char buf[64];
int fd = -1;
#if ADB_HOST
const char *host = getenv("ADBHOST");
if (host) {
fd = socket_network_client(host, adb_port, SOCK_STREAM);
}
#endif
if (fd < 0) {
fd = socket_loopback_client(adb_port, SOCK_STREAM);
}
if (fd >= 0) {
D("client: connected on remote on fd %d\n", fd);
close_on_exec(fd);
disable_tcp_nagle(fd);
snprintf(buf, sizeof buf, "emulator-%d", console_port);
register_socket_transport(fd, buf, adb_port, 1);
return 0;
}
return -1;
}
开发者ID:AOSP-JF,项目名称:platform_system_core,代码行数:25,代码来源:transport_local.cpp
示例10: getfilenoise
void
getfilenoise (datasink *dst, const char *path, cbv cb, size_t maxbytes)
{
int fds[2];
if (pipe (fds) < 0)
fatal ("pipe: %m\n");
pid_t pid = afork ();
if (pid == -1)
(*cb) ();
else if (!pid) {
close (fds[0]);
int fd = open (path, O_RDONLY|O_NONBLOCK, 0);
if (fd < 0) {
fatal ("%s: %m\n", path);
_exit (1);
return;
}
for (;;) {
char buf[1024];
size_t n = read (fd, buf, min (maxbytes, sizeof (buf)));
if (n <= 0)
_exit (0);
v_write (fds[1], buf, n);
maxbytes -= n;
if (!maxbytes)
_exit (0);
}
}
else {
close (fds[1]);
close_on_exec (fds[0]);
getprognoise (dst, fds[0], pid, cb);
}
}
开发者ID:vonwenm,项目名称:pbft,代码行数:35,代码来源:getsysnoise.C
示例11: clnt_stream_open
static void clnt_stream_open(CLNT_STREAM *clnt_stream)
{
/*
* Sanity check.
*/
if (clnt_stream->vstream)
msg_panic("clnt_stream_open: stream is open");
/*
* Schedule a read event so that we can clean up when the remote side
* disconnects, and schedule a timer event so that we can cleanup an idle
* connection. Note that both events are handled by the same routine.
*
* Finally, schedule an event to force disconnection even when the
* connection is not idle. This is to prevent one client from clinging on
* to a server forever.
*/
clnt_stream->vstream = mail_connect_wait(clnt_stream->class,
clnt_stream->service);
close_on_exec(vstream_fileno(clnt_stream->vstream), CLOSE_ON_EXEC);
event_enable_read(vstream_fileno(clnt_stream->vstream), clnt_stream_event,
(void *) clnt_stream);
event_request_timer(clnt_stream_event, (void *) clnt_stream,
clnt_stream->timeout);
event_request_timer(clnt_stream_ttl_event, (void *) clnt_stream,
clnt_stream->ttl);
}
开发者ID:ii0,项目名称:postfix,代码行数:28,代码来源:clnt_stream.c
示例12: jdwp_control_init
static int
jdwp_control_init( JdwpControl* control,
const char* sockname,
int socknamelen )
{
struct sockaddr_un addr;
socklen_t addrlen;
int s;
int maxpath = sizeof(addr.sun_path);
int pathlen = socknamelen;
if (pathlen >= maxpath) {
D( "vm debug control socket name too long (%d extra chars)\n",
pathlen+1-maxpath );
return -1;
}
memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_UNIX;
memcpy(addr.sun_path, sockname, socknamelen);
s = socket( AF_UNIX, SOCK_STREAM, 0 );
if (s < 0) {
D( "could not create vm debug control socket. %d: %s\n",
errno, strerror(errno));
return -1;
}
addrlen = (pathlen + sizeof(addr.sun_family));
if (bind(s, (struct sockaddr*)&addr, addrlen) < 0) {
D( "could not bind vm debug control socket: %d: %s\n",
errno, strerror(errno) );
adb_close(s);
return -1;
}
if ( listen(s, 4) < 0 ) {
D("listen failed in jdwp control socket: %d: %s\n",
errno, strerror(errno));
adb_close(s);
return -1;
}
control->listen_socket = s;
control->fde = fdevent_create(s, jdwp_control_event, control);
if (control->fde == NULL) {
D( "could not create fdevent for jdwp control socket\n" );
adb_close(s);
return -1;
}
/* only wait for incoming connections */
fdevent_add(control->fde, FDE_READ);
close_on_exec(s);
D("jdwp control socket started (%d)\n", control->listen_socket);
return 0;
}
开发者ID:00zhengfu00,项目名称:platform_system_core,代码行数:60,代码来源:jdwp_service.cpp
示例13: suidgetfd_required
int
suidgetfd_required (str prog)
{
int fds[2];
if (socketpair (AF_UNIX, SOCK_STREAM, 0, fds) < 0)
fatal ("socketpair: %m\n");
close_on_exec (fds[0]);
str path = fix_exec_path ("suidconnect");
char *av[] = { "suidconnect", const_cast<char *> (prog.cstr ()), NULL };
if (spawn (path, av, fds[1]) == -1)
fatal << path << ": " << strerror (errno) << "\n";
close (fds[1]);
int fd = recvfd (fds[0]);
if (fd < 0) {
struct stat sb;
if (!runinplace && !stat (path, &sb)
&& (sb.st_gid != sfs_gid || !(sb.st_mode & 02000))) {
if (struct group *gr = getgrgid (sfs_gid))
warn << path << " should be setgid to group " << gr->gr_name << "\n";
else
warn << path << " should be setgid to group " << sfs_gid << "\n";
}
else {
warn << "have you launched the appropriate daemon (sfscd or sfssd)?\n";
warn << "have subsidiary daemons died (check your system logs)?\n";
}
fatal ("could not suidconnect for %s\n", prog.cstr ());
}
close (fds[0]);
return fd;
}
开发者ID:bougyman,项目名称:sfs,代码行数:33,代码来源:suidgetfd.C
示例14: fatal
int
noise_from_prog::execprog (const char *const *av)
{
int fds[2];
if (pipe (fds) < 0)
fatal ("pipe: %m\n");
pid = afork ();
if (!pid) {
close (fds[0]);
if (fds[1] != 1)
dup2 (fds[1], 1);
if (fds[1] != 2)
dup2 (fds[1], 2);
if (fds[1] != 1 && fds[1] != 2)
close (fds[1]);
close (0);
rc_ignore (chdir ("/"));
open ("/dev/null", O_RDONLY);
char *env[] = { NULL };
execve (av[0], const_cast<char *const *> (av), env);
//warn ("%s: %m\n", av[0]);
_exit (1);
}
close (fds[1]);
close_on_exec (fds[0]);
return fds[0];
}
开发者ID:vonwenm,项目名称:pbft,代码行数:30,代码来源:getsysnoise.C
示例15: usb_init
void usb_init()
{
usb_handle *h;
adb_thread_t tid;
int fd;
h = calloc(1, sizeof(usb_handle));
h->fd = -1;
adb_cond_init(&h->notify, 0);
adb_mutex_init(&h->lock, 0);
// Open the file /dev/android_adb_enable to trigger
// the enabling of the adb USB function in the kernel.
// We never touch this file again - just leave it open
// indefinitely so the kernel will know when we are running
// and when we are not.
fd = unix_open("/dev/android_adb_enable", O_RDWR);
if (fd < 0) {
D("failed to open /dev/android_adb_enable\n");
} else {
close_on_exec(fd);
}
D("[ usb_init - starting thread ]\n");
if(adb_thread_create(&tid, usb_open_thread, h)){
fatal_errno("cannot create usb thread");
}
}
开发者ID:HyperToxic,项目名称:CWM_REC_6.0.3.2_CHN,代码行数:28,代码来源:usb_linux_client.c
示例16: contract_open
static int
contract_open(ctid_t ctid, const char *type, const char *file, int oflag) {
char path[PATH_MAX];
unsigned int n = 0;
int fd = 0;
if (type == NULL)
type = "all";
n = snprintf(path, PATH_MAX, CTFS_ROOT "/%s/%ld/%s", type, ctid, file);
if (n >= sizeof (path)) {
errno = ENAMETOOLONG;
return (-1);
}
fd = open(path, oflag);
if (fd != -1) {
if (close_on_exec(fd) == -1) {
int err = errno;
(void) close(fd);
errno = err;
return (-1);
}
}
return (fd);
}
开发者ID:SCH94,项目名称:smartos-live,代码行数:26,代码来源:zsock.c
示例17: local_connect_arbitrary_ports
int local_connect_arbitrary_ports(int console_port, int sdb_port, const char *device_name)
{
char buf[64];
int fd = -1;
#if SDB_HOST
const char *host = getenv("SDBHOST");
if (host) {
fd = socket_network_client(host, sdb_port, SOCK_STREAM);
}
#endif
if (fd < 0) {
fd = socket_loopback_client(sdb_port, SOCK_STREAM);
}
if (fd >= 0) {
D("client: connected on remote on fd %d\n", fd);
close_on_exec(fd);
disable_tcp_nagle(fd);
snprintf(buf, sizeof buf, "%s%d", LOCAL_CLIENT_PREFIX, console_port);
register_socket_transport(fd, buf, sdb_port, 1, device_name);
return 0;
}
return -1;
}
开发者ID:Markgorden,项目名称:SafeUSBDisk,代码行数:25,代码来源:transport_local.c
示例18: connect_device
static void connect_device(const std::string& address, std::string* response) {
if (address.empty()) {
*response = "empty address";
return;
}
std::string serial;
std::string host;
int port = DEFAULT_ADB_LOCAL_TRANSPORT_PORT;
if (!parse_host_and_port(address, &serial, &host, &port, response)) {
return;
}
std::string error;
int fd = network_connect(host.c_str(), port, SOCK_STREAM, 10, &error);
if (fd == -1) {
*response = android::base::StringPrintf("unable to connect to %s: %s",
serial.c_str(), error.c_str());
return;
}
D("client: connected %s remote on fd %d", serial.c_str(), fd);
close_on_exec(fd);
disable_tcp_nagle(fd);
int ret = register_socket_transport(fd, serial.c_str(), port, 0);
if (ret < 0) {
adb_close(fd);
*response = android::base::StringPrintf("already connected to %s", serial.c_str());
} else {
*response = android::base::StringPrintf("connected to %s", serial.c_str());
}
}
开发者ID:Jendorski,项目名称:platform_system_core,代码行数:33,代码来源:services.cpp
示例19: do_log_file
static void
do_log_file(FileBuff log, const char* procfile)
{
char buff[1024];
int fd;
do_log_uptime(log);
/* append file content */
fd = open(procfile,O_RDONLY);
if (fd >= 0) {
close_on_exec(fd);
for (;;) {
int ret;
ret = unix_read(fd, buff, sizeof(buff));
if (ret <= 0)
break;
file_buff_write(log, buff, ret);
if (ret < (int)sizeof(buff))
break;
}
close(fd);
}
do_log_ln(log);
}
开发者ID:songhowl,项目名称:devkit,代码行数:27,代码来源:unixreadw.c
示例20: local_connect_arbitrary_ports
int local_connect_arbitrary_ports(int console_port, int adb_port, std::string* error) {
int fd = -1;
#if ADB_HOST
if (find_emulator_transport_by_adb_port(adb_port) != nullptr) {
return -1;
}
const char *host = getenv("ADBHOST");
if (host) {
fd = network_connect(host, adb_port, SOCK_STREAM, 0, error);
}
#endif
if (fd < 0) {
fd = network_loopback_client(adb_port, SOCK_STREAM, error);
}
if (fd >= 0) {
D("client: connected on remote on fd %d", fd);
close_on_exec(fd);
disable_tcp_nagle(fd);
std::string serial = android::base::StringPrintf("emulator-%d", console_port);
if (register_socket_transport(fd, serial.c_str(), adb_port, 1) == 0) {
return 0;
}
adb_close(fd);
}
return -1;
}
开发者ID:debian-pkg-android-tools,项目名称:android-platform-system-core,代码行数:29,代码来源:transport_local.cpp
注:本文中的close_on_exec函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论