if (ctdb->daemon.sd == -1) {
return -1;
}
+
+ set_nonblocking(ctdb->daemon.sd);
+ set_close_on_exec(ctdb->daemon.sd);
if (connect(ctdb->daemon.sd, (struct sockaddr *)&addr, sizeof(addr)) == -1) {
close(ctdb->daemon.sd);
}
-static void set_non_blocking(int fd)
-{
- unsigned v;
- v = fcntl(fd, F_GETFL, 0);
- fcntl(fd, F_SETFL, v | O_NONBLOCK);
-}
-
static void block_signal(int signum)
{
struct sigaction act;
if (fd == -1) {
return;
}
- set_non_blocking(fd);
+
+ set_nonblocking(fd);
+ set_close_on_exec(fd);
client = talloc_zero(ctdb, struct ctdb_client);
client->ctdb = ctdb;
return -1;
}
+ set_nonblocking(ctdb->daemon.sd);
+ set_close_on_exec(ctdb->daemon.sd);
+
#if 0
/* AIX doesn't like this :( */
if (fchown(ctdb->daemon.sd, geteuid(), getegid()) != 0 ||
}
#endif
- set_non_blocking(ctdb->daemon.sd);
+ set_nonblocking(ctdb->daemon.sd);
memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_UNIX;
}
#endif
}
+
+void set_nonblocking(int fd)
+{
+ unsigned v;
+ v = fcntl(fd, F_GETFL, 0);
+ fcntl(fd, F_SETFL, v | O_NONBLOCK);
+}
+
+void set_close_on_exec(int fd)
+{
+ unsigned v;
+ v = fcntl(fd, F_GETFD, 0);
+ fcntl(fd, F_SETFD, v | FD_CLOEXEC);
+}
+
const char *fmt, ...) PRINTF_ATTRIBUTE(3,4);
void ctdb_release_all_ips(struct ctdb_context *ctdb);
+void set_nonblocking(int fd);
+void set_close_on_exec(int fd);
#endif
#include "../include/ctdb_private.h"
#include "ctdb_tcp.h"
-static void set_nonblocking(int fd)
-{
- unsigned v;
- v = fcntl(fd, F_GETFL, 0);
- fcntl(fd, F_SETFL, v | O_NONBLOCK);
-}
-
-
/*
called when a complete packet has come in - should not happen on this socket
*/
tnode->fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
set_nonblocking(tnode->fd);
+ set_close_on_exec(tnode->fd);
ZERO_STRUCT(sock_out);
#ifdef HAVE_SOCK_SIN_LEN
in->ctdb = ctdb;
set_nonblocking(in->fd);
+ set_close_on_exec(in->fd);
setsockopt(in->fd,SOL_SOCKET,SO_KEEPALIVE,(char *)&one,sizeof(one));
return -1;
}
+ set_close_on_exec(ctcp->listen_fd);
+
setsockopt(ctcp->listen_fd,SOL_SOCKET,SO_REUSEADDR,(char *)&one,sizeof(one));
/* we can either auto-bind to the first available address, or we can