diff options
Diffstat (limited to 'unix/tclUnixSock.c')
| -rw-r--r-- | unix/tclUnixSock.c | 19 | 
1 files changed, 14 insertions, 5 deletions
diff --git a/unix/tclUnixSock.c b/unix/tclUnixSock.c index a6360c2..7ef28d8 100644 --- a/unix/tclUnixSock.c +++ b/unix/tclUnixSock.c @@ -737,7 +737,10 @@ TcpGetOptionProc(          if (statePtr->status == 0) {              ret = getsockopt(statePtr->fds.fd, SOL_SOCKET, SO_ERROR, -                    (char *) &err, &optlen); +                            (char *) &err, &optlen); +            if (statePtr->flags & TCP_ASYNC_CONNECT) { +                statePtr->status = err; +            }              if (ret < 0) {                  err = errno;              } @@ -1054,12 +1057,17 @@ CreateClientSocket(                   */                  optlen = sizeof(int); -                getsockopt(state->fds.fd, SOL_SOCKET, SO_ERROR, -                        (char *) &status, &optlen); -                state->status = status; + +                if (state->status == 0) { +                    getsockopt(state->fds.fd, SOL_SOCKET, SO_ERROR, +                            (char *) &status, &optlen); +                    state->status = status; +                } else { +                    status = state->status; +                    state->status = 0; +                }              }  	    if (status == 0) { -		CLEAR_BITS(state->flags, TCP_ASYNC_CONNECT);  		goto out;  	    }  	} @@ -1067,6 +1075,7 @@ CreateClientSocket(  out: +    CLEAR_BITS(state->flags, TCP_ASYNC_CONNECT);      if (async_callback) {          /*           * An asynchonous connection has finally succeeded or failed.  | 
