summaryrefslogtreecommitdiffstats
path: root/win/tclWinSock.c
diff options
context:
space:
mode:
authoroehhar <harald.oehlmann@elmicron.de>2014-03-05 15:15:43 (GMT)
committeroehhar <harald.oehlmann@elmicron.de>2014-03-05 15:15:43 (GMT)
commit2910497fce32aefc629cfe738e7f2d5e0e941877 (patch)
treece26cc820e8f3656129704bb36ebef223c27edfb /win/tclWinSock.c
parentf320ea76a37f8837d998a6400000d59b72d1e376 (diff)
downloadtcl-2910497fce32aefc629cfe738e7f2d5e0e941877.zip
tcl-2910497fce32aefc629cfe738e7f2d5e0e941877.tar.gz
tcl-2910497fce32aefc629cfe738e7f2d5e0e941877.tar.bz2
"gets" blocked after async cannect: SOCKET_ASYNC_CONNECT was not cleared
Diffstat (limited to 'win/tclWinSock.c')
-rw-r--r--win/tclWinSock.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/win/tclWinSock.c b/win/tclWinSock.c
index d7b1b5b..162cbd4 100644
--- a/win/tclWinSock.c
+++ b/win/tclWinSock.c
@@ -1259,7 +1259,7 @@ CreateClientSocket(
*/
if (async) {
ThreadSpecificData *tsdPtr = TclThreadDataKeyGet(&dataKey);
- infoPtr->selectEvents |= FD_CONNECT | FD_READ | FD_WRITE;
+ infoPtr->selectEvents |= FD_CONNECT;
ioctlsocket(infoPtr->sockets->fd, (long) FIONBIO, &flag);
SendMessage(tsdPtr->hwnd, SOCKET_SELECT, (WPARAM) SELECT,
@@ -2653,18 +2653,18 @@ SocketProc(
if (event & FD_CONNECT) {
DEBUG("FD_CONNECT");
- /*
- * The socket is now connected, clear the async connect
- * flag.
- */
- //infoPtr->flags &= ~(SOCKET_ASYNC_CONNECT);
-
- /*
- * Remember any error that occurred so we can report
- * connection failures.
- */
- if (error != ERROR_SUCCESS) {
+ if (error == ERROR_SUCCESS) {
+ /*
+ * The socket is now connected, clear the async connect
+ * flag.
+ */
+ infoPtr->flags &= ~(SOCKET_ASYNC_CONNECT);
+ } else {
+ /*
+ * Remember any error that occurred so we can report
+ * connection failures.
+ */
TclWinConvertError((DWORD) error);
infoPtr->lastError = Tcl_GetErrno();
}