diff options
| author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2020-02-13 22:24:07 (GMT) |
|---|---|---|
| committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2020-02-13 22:24:07 (GMT) |
| commit | 3929a73ee0fd5945e8f186f495229f3dc98877de (patch) | |
| tree | 9580f689ca4e85163b41575852834d678e84824c /unix/tclUnixSock.c | |
| parent | 55704171415295ccf24dc89ec02755b78f05830a (diff) | |
| parent | 30c32418f67d6455d36bfeb1b8b4539ca5f23771 (diff) | |
| download | tcl-3929a73ee0fd5945e8f186f495229f3dc98877de.zip tcl-3929a73ee0fd5945e8f186f495229f3dc98877de.tar.gz tcl-3929a73ee0fd5945e8f186f495229f3dc98877de.tar.bz2 | |
Merge trunk
Diffstat (limited to 'unix/tclUnixSock.c')
| -rw-r--r-- | unix/tclUnixSock.c | 30 |
1 files changed, 10 insertions, 20 deletions
diff --git a/unix/tclUnixSock.c b/unix/tclUnixSock.c index 09ed008..29defff 100644 --- a/unix/tclUnixSock.c +++ b/unix/tclUnixSock.c @@ -687,32 +687,22 @@ TcpClose2Proc( int flags) /* Flags that indicate which side to close. */ { TcpState *statePtr = instanceData; - int errorCode = 0; - int sd; + int readError = 0; + int writeError = 0; /* * Shutdown the OS socket handle. */ - - switch(flags) { - case TCL_CLOSE_READ: - sd = SHUT_RD; - break; - case TCL_CLOSE_WRITE: - sd = SHUT_WR; - break; - default: - if (interp) { - Tcl_SetObjResult(interp, Tcl_NewStringObj( - "socket close2proc called bidirectionally", -1)); - } - return TCL_ERROR; + if ((flags & (TCL_CLOSE_READ|TCL_CLOSE_WRITE)) == 0) { + return TcpCloseProc(instanceData, interp); } - if (shutdown(statePtr->fds.fd,sd) < 0) { - errorCode = errno; + if ((flags & TCL_CLOSE_READ) && (shutdown(statePtr->fds.fd, SHUT_RD) < 0)) { + readError = errno; } - - return errorCode; + if ((flags & TCL_CLOSE_WRITE) && (shutdown(statePtr->fds.fd, SHUT_WR) < 0)) { + writeError = errno; + } + return (readError != 0) ? readError : writeError; } /* |
