diff options
| author | Kevin B Kenny <kennykb@acm.org> | 2010-12-16 01:42:18 (GMT) |
|---|---|---|
| committer | Kevin B Kenny <kennykb@acm.org> | 2010-12-16 01:42:18 (GMT) |
| commit | 7c4049a13f83930bf6a57ef889abc9e49fa414ec (patch) | |
| tree | 04a1e8720b0aa6ceec87313717f33b65a0406f9c /unix/tclUnixSock.c | |
| parent | bd15a677a69c007725ead1fa693994c3391e6d73 (diff) | |
| download | tcl-7c4049a13f83930bf6a57ef889abc9e49fa414ec.zip tcl-7c4049a13f83930bf6a57ef889abc9e49fa414ec.tar.gz tcl-7c4049a13f83930bf6a57ef889abc9e49fa414ec.tar.bz2 | |
merge
Diffstat (limited to 'unix/tclUnixSock.c')
| -rw-r--r-- | unix/tclUnixSock.c | 38 |
1 files changed, 19 insertions, 19 deletions
diff --git a/unix/tclUnixSock.c b/unix/tclUnixSock.c index 6af51d1..21dd034 100644 --- a/unix/tclUnixSock.c +++ b/unix/tclUnixSock.c @@ -8,7 +8,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclUnixSock.c,v 1.26.2.4 2010/12/11 18:39:31 kennykb Exp $ + * RCS: @(#) $Id: tclUnixSock.c,v 1.26.2.5 2010/12/16 01:42:19 kennykb Exp $ */ #include "tclInt.h" @@ -862,9 +862,9 @@ static TcpState * CreateClientSocket( Tcl_Interp *interp, /* For error reporting; can be NULL. */ int port, /* Port number to open. */ - const char *host, /* Name of host on which to open port. NULL - * implies INADDR_ANY */ - const char *myaddr, /* Optional client-side address */ + const char *host, /* Name of host on which to open port. */ + const char *myaddr, /* Optional client-side address. + * NULL implies INADDR_ANY/in6addr_any */ int myport, /* Optional client-side port */ int async) /* If nonzero and creating a client socket, * attempt to do an async connect. Otherwise @@ -885,12 +885,12 @@ CreateClientSocket( goto error; } - for (myaddrPtr = myaddrlist; myaddrPtr != NULL; - myaddrPtr = myaddrPtr->ai_next) { - for (addrPtr = addrlist; addrPtr != NULL; - addrPtr = addrPtr->ai_next) { + for (addrPtr = addrlist; addrPtr != NULL; + addrPtr = addrPtr->ai_next) { + for (myaddrPtr = myaddrlist; myaddrPtr != NULL; + myaddrPtr = myaddrPtr->ai_next) { int reuseaddr; - + /* * No need to try combinations of local and remote addresses of * different families. @@ -900,14 +900,7 @@ CreateClientSocket( continue; } - /* - * Attempt to connect. The connect may fail at present with an - * EINPROGRESS but at a later time it will complete. The caller - * will set up a file handler on the socket if she is interested - * in being informed when the connect completes. - */ - - sock = socket(myaddrPtr->ai_family, SOCK_STREAM, 0); + sock = socket(addrPtr->ai_family, SOCK_STREAM, 0); if (sock < 0) { continue; } @@ -940,6 +933,13 @@ CreateClientSocket( goto looperror; } + /* + * Attempt to connect. The connect may fail at present with an + * EINPROGRESS but at a later time it will complete. The caller + * will set up a file handler on the socket if she is interested + * in being informed when the connect completes. + */ + status = connect(sock, addrPtr->ai_addr, addrPtr->ai_addrlen); if (status < 0 && errno == EINPROGRESS) { status = 0; @@ -1196,8 +1196,8 @@ Tcl_OpenTcpServer( (char *) &reuseaddr, sizeof(reuseaddr)); /* - * Make sure we use the same port when opening two server sockets for - * IPv4 and IPv6. + * Make sure we use the same port number when opening two server + * sockets for IPv4 and IPv6 on a random port. * * As sockaddr_in6 uses the same offset and size for the port member * as sockaddr_in, we can handle both through the IPv4 API. |
