@@ -166,11 +166,15 @@ static void uv__poll_cb(uv_poll_t *handle, int status, int events) {
166
166
CHECK_NOT_NULL (qrt );
167
167
168
168
int flags = 0 ;
169
- if (events & UV_READABLE ) {
170
- flags |= CURL_CSELECT_IN ;
171
- }
172
- if (events & UV_WRITABLE ) {
173
- flags |= CURL_CSELECT_OUT ;
169
+ if (status != 0 ) {
170
+ flags |= CURL_CSELECT_ERR ;
171
+ } else {
172
+ if (events & UV_READABLE ) {
173
+ flags |= CURL_CSELECT_IN ;
174
+ }
175
+ if (events & UV_WRITABLE ) {
176
+ flags |= CURL_CSELECT_OUT ;
177
+ }
174
178
}
175
179
176
180
int running_handles ;
@@ -198,17 +202,17 @@ static int curl__handle_socket(CURL *easy, curl_socket_t s, int action, void *us
198
202
if (r != 0 ) {
199
203
fprintf (stderr , "uv_poll_init_socket error: %d socket: %d\n" , r , s );
200
204
fflush (stderr );
201
- CHECK_EQ (r , 0 );
205
+ //CHECK_EQ(r, 0);
206
+ return -1 ;
202
207
}
203
208
poll_ctx -> qrt = qrt ;
204
209
poll_ctx -> sockfd = s ;
205
210
poll_ctx -> poll .data = poll_ctx ;
211
+ curl_multi_assign (qrt -> curl_ctx .curlm_h , s , (void * ) poll_ctx );
206
212
} else {
207
213
poll_ctx = socketp ;
208
214
}
209
215
210
- curl_multi_assign (qrt -> curl_ctx .curlm_h , s , (void * ) poll_ctx );
211
-
212
216
int events = 0 ;
213
217
if (action != CURL_POLL_IN ) {
214
218
events |= UV_WRITABLE ;
@@ -228,8 +232,8 @@ static int curl__handle_socket(CURL *easy, curl_socket_t s, int action, void *us
228
232
uv_close ((uv_handle_t * ) & poll_ctx -> poll , uv__poll_close_cb );
229
233
}
230
234
break ;
231
- default :
232
- abort () ;
235
+ case CURL_POLL_NONE :
236
+ break ;
233
237
}
234
238
235
239
return 0 ;
0 commit comments