Skip to content

Commit c502f6a

Browse files
committed
multi: fix slow write/upload performance on Windows
Reset FD_WRITE by sending zero bytes which is permissible and will be treated by implementations as successful. Bug: curl#6146 Closes curl#6245
1 parent c01f955 commit c502f6a

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

lib/multi.c

+8-5
Original file line numberDiff line numberDiff line change
@@ -1177,22 +1177,23 @@ static CURLMcode Curl_multi_wait(struct Curl_multi *multi,
11771177
long mask = 0;
11781178
#endif
11791179
if(bitmap & GETSOCK_READSOCK(i)) {
1180+
s = sockbunch[i];
11801181
#ifdef USE_WINSOCK
11811182
mask |= FD_READ|FD_ACCEPT|FD_CLOSE;
11821183
#endif
1183-
ufds[nfds].fd = sockbunch[i];
1184+
ufds[nfds].fd = s;
11841185
ufds[nfds].events = POLLIN;
11851186
++nfds;
1186-
s = sockbunch[i];
11871187
}
11881188
if(bitmap & GETSOCK_WRITESOCK(i)) {
1189+
s = sockbunch[i];
11891190
#ifdef USE_WINSOCK
11901191
mask |= FD_WRITE|FD_CONNECT|FD_CLOSE;
1192+
send(s, NULL, 0, 0); /* reset FD_WRITE */
11911193
#endif
1192-
ufds[nfds].fd = sockbunch[i];
1194+
ufds[nfds].fd = s;
11931195
ufds[nfds].events = POLLOUT;
11941196
++nfds;
1195-
s = sockbunch[i];
11961197
}
11971198
if(s == CURL_SOCKET_BAD) {
11981199
break;
@@ -1218,8 +1219,10 @@ static CURLMcode Curl_multi_wait(struct Curl_multi *multi,
12181219
mask |= FD_READ|FD_ACCEPT|FD_CLOSE;
12191220
if(extra_fds[i].events & CURL_WAIT_POLLPRI)
12201221
mask |= FD_OOB;
1221-
if(extra_fds[i].events & CURL_WAIT_POLLOUT)
1222+
if(extra_fds[i].events & CURL_WAIT_POLLOUT) {
12221223
mask |= FD_WRITE|FD_CONNECT|FD_CLOSE;
1224+
send(extra_fds[i].fd, NULL, 0, 0); /* reset FD_WRITE */
1225+
}
12231226
if(WSAEventSelect(extra_fds[i].fd, multi->wsa_event, mask) != 0) {
12241227
if(ufds_malloc)
12251228
free(ufds);

0 commit comments

Comments
 (0)