41 #undef MHD_daemon_get_fdset
71 fd_set *except_fd_set,
83 #if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
97 urh_to_fdset (
struct MHD_UpgradeResponseHandle *urh,
102 unsigned int fd_setsize)
104 const MHD_socket conn_sckt = urh->connection->socket_fd;
112 if ( (urh->in_buffer_used < urh->in_buffer_size) &&
118 if ( (0 != urh->out_buffer_used) &&
127 ((0 != urh->in_buffer_size) ||
128 (0 != urh->out_buffer_size) ||
129 (0 != urh->out_buffer_used)))
137 if ( (urh->out_buffer_used < urh->out_buffer_size) &&
143 if ( (0 != urh->in_buffer_used) &&
152 ((0 != urh->out_buffer_size) ||
153 (0 != urh->in_buffer_size) ||
154 (0 != urh->in_buffer_used)))
181 static enum MHD_StatusCode
184 fd_set *write_fd_set,
185 fd_set *except_fd_set,
187 unsigned int fd_setsize)
192 enum MHD_StatusCode result = MHD_SC_OK;
196 return MHD_SC_DAEMON_ALREADY_SHUTDOWN;
205 result = MHD_SC_SOCKET_OUTSIDE_OF_FDSET_RANGE;
222 result = MHD_SC_SOCKET_OUTSIDE_OF_FDSET_RANGE;
223 #ifdef MHD_POSIX_SOCKETS
235 result = MHD_SC_SOCKET_OUTSIDE_OF_FDSET_RANGE;
236 #ifdef MHD_POSIX_SOCKETS
244 if ( (
NULL == except_fd_set) ||
249 result = MHD_SC_SOCKET_OUTSIDE_OF_FDSET_RANGE;
256 #ifdef MHD_WINSOCK_SOCKETS
269 #if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
271 struct MHD_UpgradeResponseHandle *urh;
273 for (urh = daemon->urh_tail;
NULL != urh; urh = urh->prev)
275 if (! urh_to_fdset (urh,
281 result = MHD_SC_SOCKET_OUTSIDE_OF_FDSET_RANGE;
319 fd_set *write_fd_set,
320 fd_set *except_fd_set,
322 unsigned int fd_setsize)
326 return MHD_SC_CONFIGURATION_MISMATCH_FOR_GET_FDSET;
332 return MHD_SC_DAEMON_ALREADY_SHUTDOWN;
342 : MHD_SC_SOCKET_OUTSIDE_OF_FDSET_RANGE;
355 #if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
366 urh_from_fdset (
struct MHD_UpgradeResponseHandle *urh,
371 const MHD_socket conn_sckt = urh->connection->socket_fd;
380 if (FD_ISSET (conn_sckt, rs))
382 if (FD_ISSET (conn_sckt, ws))
384 if (FD_ISSET (conn_sckt, es))
389 if (FD_ISSET (mhd_sckt, rs))
391 if (FD_ISSET (mhd_sckt, ws))
393 if (FD_ISSET (mhd_sckt, es))
412 static enum MHD_StatusCode
414 const fd_set *read_fd_set,
415 const fd_set *write_fd_set,
416 const fd_set *except_fd_set)
421 #if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
422 struct MHD_UpgradeResponseHandle *urh;
423 struct MHD_UpgradeResponseHandle *urhn;
432 if ( (MHD_ITC_IS_VALID_ (daemon->
itc)) &&
433 (FD_ISSET (MHD_itc_r_fd_ (daemon->
itc),
435 MHD_itc_clear_ (daemon->
itc);
448 while (
NULL != (pos = prev))
464 #if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
466 for (urh = daemon->urh_tail;
NULL != urh; urh = urhn)
475 MHD_upgrade_response_handle_process_ (urh);
477 if ( (0 == urh->in_buffer_size) &&
478 (0 == urh->out_buffer_size) &&
479 (0 == urh->in_buffer_used) &&
480 (0 == urh->out_buffer_used) )
483 urh->clean_ready =
true;
494 #if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)
502 MHD_daemon_upgrade_connection_with_select_ (
struct MHD_Connection *con)
504 struct MHD_UpgradeResponseHandle *urh = con->
request.urh;
506 while ( (0 != urh->in_buffer_size) ||
507 (0 != urh->out_buffer_size) ||
508 (0 != urh->in_buffer_used) ||
509 (0 != urh->out_buffer_used) )
523 result = urh_to_fdset (urh,
533 MHD_SC_SOCKET_OUTSIDE_OF_FDSET_RANGE,
534 _ (
"Error preparing select.\n"));
544 (urh->in_buffer_used < urh->in_buffer_size))
568 MHD_SC_UNEXPECTED_SELECT_ERROR,
569 _ (
"Error during select (%d): `%s'\n"),
579 MHD_upgrade_response_handle_process_ (urh);
611 const fd_set *read_fd_set,
614 const fd_set *write_fd_set,
615 const fd_set *except_fd_set)
619 return MHD_SC_CONFIGURATION_MISSMATCH_FOR_RUN_SELECT;
623 enum MHD_StatusCode sc;
625 sc = MHD_daemon_epoll_ (daemon,
662 struct timeval timeout;
666 enum MHD_StatusCode sc;
667 enum MHD_StatusCode sc2;
672 return MHD_SC_DAEMON_ALREADY_SHUTDOWN;
698 _ (
"Could not obtain daemon fdsets.\n"));
714 MHD_SC_SOCKET_OUTSIDE_OF_FDSET_RANGE,
715 _ (
"Could not add listen socket to fdset.\n"));
717 return MHD_SC_SOCKET_OUTSIDE_OF_FDSET_RANGE;
720 if ( (MHD_ITC_IS_VALID_ (daemon->
itc)) &&
726 #if defined(MHD_WINSOCK_SOCKETS)
741 sc = MHD_SC_SOCKET_OUTSIDE_OF_FDSET_RANGE;
746 "Could not add control inter-thread communication channel FD to fdset.\n"));
748 #if defined(MHD_WINSOCK_SOCKETS)
762 (MHD_ITC_IS_VALID_ (daemon->
itc)) &&
778 else if ( (MHD_TM_THREAD_PER_CONNECTION != daemon->
threading_mode) &&
784 timeout.tv_usec = (ltimeout % 1000) * 1000;
797 return MHD_SC_DAEMON_ALREADY_SHUTDOWN;
806 MHD_SC_UNEXPECTED_SELECT_ERROR,
807 _ (
"select failed: %s\n"),
810 return MHD_SC_UNEXPECTED_SELECT_ERROR;