X-Git-Url: https://www.tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fnet_socket.c;h=0ba2bf312757031970098b04efaacac02fa6028d;hb=053af97c9e729ab485609e4202f5195fdc8aeeb5;hp=d5f85d5a0ceac9a3ed59f9f952c4a85136d6ad77;hpb=1135669b3c6820f5473ea451a58865f552ba768f;p=tinc diff --git a/src/net_socket.c b/src/net_socket.c index d5f85d5a..0ba2bf31 100644 --- a/src/net_socket.c +++ b/src/net_socket.c @@ -373,10 +373,28 @@ static void handle_meta_write(connection_t *c) { } static void handle_meta_io(void *data, int flags) { + connection_t *c = data; + + if(c->status.connecting) { + c->status.connecting = false; + + int result; + socklen_t len = sizeof result; + getsockopt(c->socket, SOL_SOCKET, SO_ERROR, &result, &len); + + if(!result) + finish_connecting(c); + else { + logger(DEBUG_CONNECTIONS, LOG_DEBUG, "Error while connecting to %s (%s): %s", c->name, c->hostname, sockstrerror(result)); + terminate_connection(c, false); + return; + } + } + if(flags & IO_WRITE) - handle_meta_write(data); + handle_meta_write(c); else - handle_meta_connection_data(data); + handle_meta_connection_data(c); } bool do_outgoing_connection(outgoing_t *outgoing) { @@ -493,7 +511,7 @@ begin: connection_add(c); - io_add(&c->io, handle_meta_io, c, c->socket, IO_READ); + io_add(&c->io, handle_meta_io, c, c->socket, IO_READ|IO_WRITE); return true; }