Commit 3327e0e8 authored by Deomid Ryabkov's avatar Deomid Ryabkov Committed by Marko Mikulicic

Make it legal to have a conn with INVALID_SOCKET

E.g. a timer-only connection

PUBLISHED_FROM=e8d4d2b6e5e0dfa8e8f987b2ded6b973c39e2919
parent 0456f0f5
......@@ -3721,15 +3721,15 @@ time_t mg_mgr_poll(struct mg_mgr *mgr, int timeout_ms) {
mg_add_to_set(mgr->ctl[1], &read_set, &max_fd);
#endif
/*
* Note: it is ok to have connections with sock == INVALID_SOCKET in the list,
* e.g. timer-only "connections".
*/
min_timer = 0;
for (nc = mgr->active_connections, num_fds = 0; nc != NULL; nc = tmp) {
tmp = nc->next;
if (nc->sock == INVALID_SOCKET) {
mg_mgr_handle_conn(nc, 0, now);
continue;
}
if (nc->sock != INVALID_SOCKET) {
num_fds++;
if (!(nc->flags & MG_F_WANT_WRITE) &&
......@@ -3743,6 +3743,7 @@ time_t mg_mgr_poll(struct mg_mgr *mgr, int timeout_ms) {
mg_add_to_set(nc->sock, &write_set, &max_fd);
mg_add_to_set(nc->sock, &err_set, &max_fd);
}
}
if (nc->ev_timer_time > 0) {
if (num_timers == 0 || nc->ev_timer_time < min_timer) {
......@@ -3781,6 +3782,7 @@ time_t mg_mgr_poll(struct mg_mgr *mgr, int timeout_ms) {
for (nc = mgr->active_connections; nc != NULL; nc = tmp) {
int fd_flags = 0;
if (nc->sock != INVALID_SOCKET) {
if (num_ev > 0) {
fd_flags = (FD_ISSET(nc->sock, &read_set) ? _MG_F_FD_CAN_READ : 0) |
(FD_ISSET(nc->sock, &write_set) ? _MG_F_FD_CAN_WRITE : 0) |
......@@ -3797,6 +3799,7 @@ time_t mg_mgr_poll(struct mg_mgr *mgr, int timeout_ms) {
/* With LWIP socket emulation layer, we don't get write events */
fd_flags |= _MG_F_FD_CAN_WRITE;
#endif
}
tmp = nc->next;
mg_mgr_handle_conn(nc, fd_flags, now);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment