From 924904c89c2624fce6f0e9f13ef0d03903beebca Mon Sep 17 00:00:00 2001 From: =?utf8?q?Daniel=20Kou=C5=99il?= Date: Thu, 19 Jan 2012 08:25:02 +0000 Subject: [PATCH] make sure socket is only stored on success (even with subsuqent changes of the code) --- emi.canl.canl-c/src/canl.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) 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; } -- 1.8.2.3