From: Daniel KouĊ™il Date: Thu, 19 Jan 2012 08:25:02 +0000 (+0000) Subject: make sure socket is only stored on success (even with subsuqent changes of the code) X-Git-Tag: emi-canl-c_R_1_0_0_0~22 X-Git-Url: http://scientific.zcu.cz/git/?a=commitdiff_plain;h=924904c89c2624fce6f0e9f13ef0d03903beebca;p=jra1mw.git make sure socket is only stored on success (even with subsuqent changes of the code) --- diff --git a/emi.canl.canl-c/src/canl.c b/emi.canl.canl-c/src/canl.c index 0e23b16..97e9c5a 100644 --- a/emi.canl.canl-c/src/canl.c +++ b/emi.canl.canl-c/src/canl.c @@ -195,7 +195,7 @@ static int try_connect(glb_ctx *glb_cc, io_handler *io_cc, char *addr, struct sockaddr_storage a; struct sockaddr_storage *p_a=&a; socklen_t a_len; - //int opt; + int sock; int err = 0; struct sockaddr_in *p4 = (struct sockaddr_in *)p_a; @@ -215,23 +215,24 @@ static int try_connect(glb_ctx *glb_cc, io_handler *io_cc, char *addr, a_len = sizeof (struct sockaddr_in6); break; default: - return EINVAL; + return set_error(glb_cc, EINVAL, posix_error, + "Unsupported address type (%d)", addrtype); break; } - io_cc->sock = socket(a.ss_family, SOCK_STREAM, 0); - if (io_cc->sock == -1) - return errno; + sock = socket(a.ss_family, SOCK_STREAM, 0); + if (sock == -1) + return set_error(glb_cc, errno, posix_error, + "Failed to create network socket"); - err = connect(io_cc->sock,(struct sockaddr *) &a, a_len); + err = connect(sock,(struct sockaddr *) &a, a_len); /* XXX timeouts missing */ if (err) { - close(io_cc->sock); - io_cc->sock = -1; return set_error(glb_cc, errno, posix_error, "Failed to open network connection"); } + io_cc->sock = sock; return 0; }