Diff
Not logged in

Differences From Artifact [e9ba418d86]:

To Artifact [12cffa5d87]:


1206
1207
1208
1209
1210
1211
1212









1213
1214
1215
1216
1217
1218
1219
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228







+
+
+
+
+
+
+
+
+








    while (1) {
	if (infoPtr->lastError) {
	    *errorCodePtr = infoPtr->lastError;
	    result = 0;
	    break;
	} else if (infoPtr->readyEvents & events) {
	    break;
	} else if ((events == FD_CONNECT) && 
		   !(infoPtr->flags & SOCKET_ASYNC_CONNECT)) {
	    /* When waiting for FD_CONNECT Windows may not deliver this event,
	     * causing us to get stuck. However, SocketProc()'s SOCKET_MESSAGE
	     * handler has special code which detects this and resets the
	     * infoPtr->flags async bit anyway (See (xxx)). That we can detect
	     * here and break the loop as if we had gotten FD_CONNECT.
	     */
	    break;
	} else if (infoPtr->flags & SOCKET_ASYNC) {
	    *errorCodePtr = EWOULDBLOCK;
	    result = 0;
	    break;
	}

2323
2324
2325
2326
2327
2328
2329

2330
2331
2332
2333
2334
2335
2336
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346







+








		    if (error != ERROR_SUCCESS) {
			TclWinConvertWSAError((DWORD) error);
			infoPtr->lastError = Tcl_GetErrno();
		    }
		}

		/* (xxx) See corresponding marker in WaitForSocketEvent as well */
		if (infoPtr->flags & SOCKET_ASYNC_CONNECT) {
		    infoPtr->flags &= ~(SOCKET_ASYNC_CONNECT);
		    if (error != ERROR_SUCCESS) {
			TclWinConvertWSAError((DWORD) error);
			infoPtr->lastError = Tcl_GetErrno();
		    }
		    infoPtr->readyEvents |= FD_WRITE;