summaryrefslogtreecommitdiffstats
path: root/unix/tclUnixSock.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2020-02-13 22:24:07 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2020-02-13 22:24:07 (GMT)
commit3929a73ee0fd5945e8f186f495229f3dc98877de (patch)
tree9580f689ca4e85163b41575852834d678e84824c /unix/tclUnixSock.c
parent55704171415295ccf24dc89ec02755b78f05830a (diff)
parent30c32418f67d6455d36bfeb1b8b4539ca5f23771 (diff)
downloadtcl-3929a73ee0fd5945e8f186f495229f3dc98877de.zip
tcl-3929a73ee0fd5945e8f186f495229f3dc98877de.tar.gz
tcl-3929a73ee0fd5945e8f186f495229f3dc98877de.tar.bz2
Merge trunk
Diffstat (limited to 'unix/tclUnixSock.c')
-rw-r--r--unix/tclUnixSock.c30
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;
}
/*