summaryrefslogtreecommitdiffstats
path: root/ctdb/tcp/tcp_connect.c
diff options
context:
space:
mode:
Diffstat (limited to 'ctdb/tcp/tcp_connect.c')
-rw-r--r--ctdb/tcp/tcp_connect.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/ctdb/tcp/tcp_connect.c b/ctdb/tcp/tcp_connect.c
index e8cae58bd6..383d72641b 100644
--- a/ctdb/tcp/tcp_connect.c
+++ b/ctdb/tcp/tcp_connect.c
@@ -154,6 +154,10 @@ void ctdb_tcp_node_connect(struct event_context *ev, struct timed_event *te,
}
tnode->fd = socket(sock_out.sa.sa_family, SOCK_STREAM, IPPROTO_TCP);
+ if (tnode->fd == -1) {
+ DEBUG(DEBUG_ERR, (__location__ "Failed to create socket\n"));
+ return;
+ }
set_nonblocking(tnode->fd);
set_close_on_exec(tnode->fd);
@@ -196,7 +200,12 @@ void ctdb_tcp_node_connect(struct event_context *ev, struct timed_event *te,
sock_in.ip.sin_len = sockin_size;
sock_out.ip.sin_len = sockout_size;
#endif
- bind(tnode->fd, (struct sockaddr *)&sock_in, sockin_size);
+ if (bind(tnode->fd, (struct sockaddr *)&sock_in, sockin_size) == -1) {
+ DEBUG(DEBUG_ERR, (__location__ "Failed to bind socket %s(%d)\n",
+ strerror(errno), errno));
+ close(tnode->fd);
+ return;
+ }
if (connect(tnode->fd, (struct sockaddr *)&sock_out, sockout_size) != 0 &&
errno != EINPROGRESS) {