aboutsummaryrefslogtreecommitdiff
path: root/src/microhttpd/test_upgrade_large.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/microhttpd/test_upgrade_large.c')
-rw-r--r--src/microhttpd/test_upgrade_large.c39
1 files changed, 36 insertions, 3 deletions
diff --git a/src/microhttpd/test_upgrade_large.c b/src/microhttpd/test_upgrade_large.c
index fdf2edf7..6f2a1b94 100644
--- a/src/microhttpd/test_upgrade_large.c
+++ b/src/microhttpd/test_upgrade_large.c
@@ -67,6 +67,8 @@
67 67
68static int verbose = 0; 68static int verbose = 0;
69 69
70static int kicker[2] = {-1, -1} ;
71
70enum tls_tool 72enum tls_tool
71{ 73{
72 TLS_CLI_NO_TOOL = 0, 74 TLS_CLI_NO_TOOL = 0,
@@ -570,7 +572,17 @@ make_blocking (MHD_socket fd)
570 572
571 ioctlsocket (fd, FIONBIO, &flags); 573 ioctlsocket (fd, FIONBIO, &flags);
572#endif /* MHD_WINSOCK_SOCKETS */ 574#endif /* MHD_WINSOCK_SOCKETS */
575}
576
573 577
578static void
579kick_select ()
580{
581 if (-1 != kicker[1])
582 {
583 write (kicker[1], "K", 1);
584 fprintf (stderr, "KICKING\n");
585 }
574} 586}
575 587
576 588
@@ -588,6 +600,7 @@ send_all (struct wr_socket *sock,
588 ret = wr_send (sock, 600 ret = wr_send (sock,
589 &text[off], 601 &text[off],
590 len - off); 602 len - off);
603 kick_select ();
591 if (0 > ret) 604 if (0 > ret)
592 { 605 {
593 if (MHD_SCKT_ERR_IS_EAGAIN_ (MHD_socket_get_error_ ())) 606 if (MHD_SCKT_ERR_IS_EAGAIN_ (MHD_socket_get_error_ ()))
@@ -621,6 +634,7 @@ recv_hdr (struct wr_socket *sock)
621 ret = wr_recv (sock, 634 ret = wr_recv (sock,
622 &c, 635 &c,
623 1); 636 1);
637 kick_select ();
624 if (0 > ret) 638 if (0 > ret)
625 { 639 {
626 if (MHD_SCKT_ERR_IS_EAGAIN_ (MHD_socket_get_error_ ())) 640 if (MHD_SCKT_ERR_IS_EAGAIN_ (MHD_socket_get_error_ ()))
@@ -889,7 +903,10 @@ run_mhd_select_loop (struct MHD_Daemon *daemon)
889 MHD_socket max_fd; 903 MHD_socket max_fd;
890 MHD_UNSIGNED_LONG_LONG to; 904 MHD_UNSIGNED_LONG_LONG to;
891 struct timeval tv; 905 struct timeval tv;
906 char drain[128];
892 907
908 if (0 != pipe (kicker))
909 abort ();
893 while (! done) 910 while (! done)
894 { 911 {
895 FD_ZERO (&rs); 912 FD_ZERO (&rs);
@@ -898,6 +915,7 @@ run_mhd_select_loop (struct MHD_Daemon *daemon)
898 max_fd = -1; 915 max_fd = -1;
899 to = 1000; 916 to = 1000;
900 917
918 FD_SET (kicker[0], &rs);
901 if (MHD_YES != 919 if (MHD_YES !=
902 MHD_get_fdset (daemon, 920 MHD_get_fdset (daemon,
903 &rs, 921 &rs,
@@ -917,11 +935,17 @@ run_mhd_select_loop (struct MHD_Daemon *daemon)
917 &es, 935 &es,
918 &tv)) 936 &tv))
919 abort (); 937 abort ();
938 if (FD_ISSET (kicker[0], &rs))
939 (void) read (kicker[0], drain, sizeof (drain));
920 MHD_run_from_select (daemon, 940 MHD_run_from_select (daemon,
921 &rs, 941 &rs,
922 &ws, 942 &ws,
923 &es); 943 &es);
924 } 944 }
945 close (kicker[0]);
946 close (kicker[1]);
947 kicker[0] = -1;
948 kicker[1] = -1;
925} 949}
926 950
927#ifdef HAVE_POLL 951#ifdef HAVE_POLL
@@ -955,15 +979,18 @@ run_mhd_epoll_loop (struct MHD_Daemon *daemon)
955 MHD_UNSIGNED_LONG_LONG to; 979 MHD_UNSIGNED_LONG_LONG to;
956 struct timeval tv; 980 struct timeval tv;
957 int ret; 981 int ret;
982 char drain[128];
958 983
959 di = MHD_get_daemon_info (daemon, 984 di = MHD_get_daemon_info (daemon,
960 MHD_DAEMON_INFO_EPOLL_FD); 985 MHD_DAEMON_INFO_EPOLL_FD);
961 ep = di->listen_fd; 986 ep = di->listen_fd;
987 if (0 != pipe (kicker))
988 abort ();
962 while (! done) 989 while (! done)
963 { 990 {
964 FD_ZERO (&rs); 991 FD_ZERO (&rs);
965 to = 1000; 992 to = 1000;
966 993 FD_SET (kicker[0], &rs);
967 FD_SET (ep, &rs); 994 FD_SET (ep, &rs);
968 (void) MHD_get_timeout (daemon, 995 (void) MHD_get_timeout (daemon,
969 &to); 996 &to);
@@ -980,8 +1007,14 @@ run_mhd_epoll_loop (struct MHD_Daemon *daemon)
980 (EAGAIN != errno) && 1007 (EAGAIN != errno) &&
981 (EINTR != errno) ) 1008 (EINTR != errno) )
982 abort (); 1009 abort ();
1010 if (FD_ISSET (kicker[0], &rs))
1011 (void) read (kicker[0], drain, sizeof (drain));
983 MHD_run (daemon); 1012 MHD_run (daemon);
984 } 1013 }
1014 close (kicker[0]);
1015 close (kicker[1]);
1016 kicker[0] = -1;
1017 kicker[1] = -1;
985} 1018}
986#endif /* EPOLL_SUPPORT */ 1019#endif /* EPOLL_SUPPORT */
987 1020
@@ -1080,8 +1113,8 @@ test_upgrade (int flags,
1080 sa.sin_port = htons (dinfo->port); 1113 sa.sin_port = htons (dinfo->port);
1081 sa.sin_addr.s_addr = htonl (INADDR_LOOPBACK); 1114 sa.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
1082 if (0 != wr_connect (sock, 1115 if (0 != wr_connect (sock,
1083 (struct sockaddr *) &sa, 1116 (struct sockaddr *) &sa,
1084 sizeof (sa))) 1117 sizeof (sa)))
1085 abort (); 1118 abort ();
1086 } 1119 }
1087 else 1120 else