mirror of
https://git.gnunet.org/libmicrohttpd.git
synced 2026-09-27 04:09:31 +03:00
84f0be5c249010235f4e2267cb8f77f6fc07d45a
Can't test POLL mode as MHD didn't support POLL on W32. The reason - winsock implementation is somehow different from POSIX one. libcurl initially added poll support for win32 but later it was removed. I didn't check specific reason so for safety MHD didn't use POLL on W32. However I leave changes for POLL code "as is" in case that we will add support for POLL on win32. SELECT mode now works perfectly. Shutdown processed without any delay. May be some comments will be good addition. Patch is attached. -- Evgeny 09.04.2015, 17:28, "Christian Grothoff" <christian@grothoff.org>: > Hi Evgeny, > > I've tried to put together a patch for the issue, but as I'm on > GNU/Linux, I cannot even test if the patch compiles... Please let me > know if it works (and please test with POLL and SELECT separately), at > least in principle I think this is roughly what the patch should look > like... > > Happy hacking! > > Christian > > On 04/09/2015 03:25 PM, Evgeny Grin wrote: >> If HAVE_LISTEN_SHUTDOWN is not defined (as on win32), pipe is used >> automatically. >> But pipe is monitored only in main "select()" thread. It's not >> monitored in "connection" thread. >> >> Best Wishes, >> Evgeny Grin >> >> On 04/09/2015 12:56 PM, Evgeny Grin wrote: >>> Hi Christian! >>> >>> Another issue on win32, 100% reproducible. >>> When running Kodi unittests, MHD always takes 120 seconds to shutdown. >>> >>> How to reproduce: >>> * Start MHD with THREAD_PER_CONNECTION | DEBUG and some static >> response, >>> * Generate one http 1.1 request with libcurl. Notice that libcurl >> always add keep-alive for http 1.1. >>> * Let MHD to process request and answer with response. >>> * MHD will stay with master thread and one connection thread waiting >> for additional requests from same client. >>> * Call MHD shutdown. Main thread will shutdown all sockets, but >> additional connection thread will stay at MHD_sys_select_ and will get >> notification about socket shutdown only after 2 minutes. May be it's >> after libcurl will close connection. >>> Again - have no idea how to fix it properly. Use pair of sockets >> (emulated pipe) for each connection thread? Add daemon pipe FD to >> select() in connection thread?
fixing https testcases that require SSL3, but SSL3 is dead and with modern gnutls not even supported
About ===== GNU libmicrohttpd is a GNU package offering a C library that provides a compact API and implementation of an HTTP 1.1 web server (HTTP 1.0 is also supported). GNU libmicrohttpd only implements the HTTP 1.1 protocol. The main application must still provide the application logic to generate the content. Additionally, a second, still very experimental library is provided for SPDY (the base for HTTP 2.0) support. libmicrospdy provides a compact API and implementation of SPDY server. libmicrospdy currently only implements partially version 3 of SPDY. Installation ============ If you are using Subversion, run "autoreconf -fi" to create configure. In order to run the testcases, you need a recent version of libcurl. libcurl is not required if you just want to install the library. Especially for development, do use the MHD_USE_DEBUG option to get error messages. Requirements for libmicrospdy ============================= The following packages are needed to build libmicrospdy: * zlib * OpenSSL >= 1.0.1 To run the test cases, involving requests, version of Spdylay, supporting SPDY v3, is required. Spdylay is still under development and can be found here: http://spdylay.sourceforge.net/ Configure options ================= If you are concerned about space, you should set "CFLAGS" to "-Os -fomit-frame-pointer" to have gcc generate tight code. You can use the following options to disable certain MHD features: --disable-https: no HTTPS / TLS / SSL support (significant reduction) --disable-messages: no error messages (they take space!) --disable-postprocessor: no MHD_PostProcessor API --disable-dauth: no digest authentication API --disable-epoll: no support for epoll, even on Linux The resulting binary should be about 30-40k depending on the platform. Portability =========== The latest version of libmicrohttpd will try to avoid SIGPIPE on its sockets. This should work on OS X, Linux and recent BSD systems (at least). On other systems that may trigger a SIGPIPE on send/recv, the main application should install a signal handler to handle SIGPIPE. libmicrohttpd should work well on GNU/Linux, BSD, OS X, W32 and z/OS. Note that HTTPS is not supported on z/OS (yet). We also have reports of users using it on vxWorks and Symbian. Note that on platforms where the compiler does not support the "constructor" attribute, you must call "MHD_init" before using any MHD functions and "MHD_fini" after you are done using MHD. Development Status ================== This is a beta release for libmicrohttpd. Before declaring the library stable, we should implement support for HTTP "Upgrade" requests and have testcases for the following features: - HTTP/1.1 pipelining (need to figure out how to ensure curl pipelines -- and it seems libcurl has issues with pipelining, see http://curl.haxx.se/mail/lib-2007-12/0248.html) - resource limit enforcement - client queuing early response, suppressing 100 CONTINUE - chunked encoding to validate handling of footers - more testing for SSL support - MHD basic and digest authentication In particular, the following functions are not covered by 'make check': - mhd_panic_std (daemon.c); special case (abort) - parse_options (daemon.c) - MHD_set_panic_func (daemon.c) - MHD_get_version (daemon.c) This is an early alpha release for libmicrospdy. The following things should be implemented (in order of importance) before we can claim to be reasonably complete: - 8 different output queues (one for each priority) have to be implemented together with a suitable algorithm for utilizing them. Otherwise, downloading a file will block all responses with same or smaller priority - SPDY RST_STREAM sending on each possible error (DONE?) - SPDY_close_session - Find the best way for closing still opened stream (new call or existing) - SPDY_is_stream_opened - SPDY PING (used often by browsers) - receiving SPDY WINDOW_UPDATE - SPDY Settings - SPDY PUSH - SPDY HEADERS - SPDY Credentials Additional ideas for features include: - Individual callbacks for each session - Individual timeout for each session Unimplemented API functions of libmicrospdy: - SPDY_settings_create (); - SPDY_settings_add (...); - SPDY_settings_lookup (...); - SPDY_settings_iterate (...); - SPDY_settings_destroy (...); - SPDY_close_session(...); - SPDY_send_ping(...); - SPDY_send_settings (...); In particular, we should write tests for: - Enqueueing responses while considering request priorities. - HTTP methods other than GET Missing documentation: ====================== - libmicrospdy manual: * missing entirely
Languages
C
86.4%
M4
10.3%
Shell
1.9%
Makefile
1.3%