[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [libmicrohttpd] libmicrohttpd 0.9.49 released

From: Markus Doppelbauer
Subject: Re: [libmicrohttpd] libmicrohttpd 0.9.49 released
Date: Tue, 12 Apr 2016 22:57:23 +0200

Hi Christian,

You are right - switching to non-blocking fixes this problem. Thanks for
your help. It worked with 0.9.48 - but had some flaws (now I know why).
Please close this issue - this was my fault.


Am Dienstag, den 12.04.2016, 21:50 +0200 schrieb Christian Grothoff:
Ah, the cause is that you create the listen socket (which is OK), but
you don't set it to be non-blocking.  The result looks like this:

pid  5676] <... epoll_wait resumed> {{EPOLLIN, {u32=39549584,
u64=39549584}}}, 128, -1) = 1
[pid  5676] accept4(4, {sa_family=AF_INET, sin_port=htons(35076),
sin_addr=inet_addr("")}, [16], SOCK_CLOEXEC|SOCK_NONBLOCK) = 8
[pid  5676] mmap(NULL, 134217728, PROT_NONE,
[pid  5676] munmap(0x7f74bc1ab000, 65359872) = 0
[pid  5676] munmap(0x7f74c4000000, 1748992) = 0
[pid  5676] mprotect(0x7f74c0000000, 135168, PROT_READ|PROT_WRITE) = 0
[pid  5676] fcntl(8, F_GETFL)           = 0x802 (flags O_RDWR|O_NONBLOCK)
[pid  5676] epoll_ctl(7, EPOLL_CTL_ADD, 8, {EPOLLIN|EPOLLOUT|EPOLLET,
{u32=3221227712, u64=140139414161600}}) = 0
[pid  5676] accept4(4,   <= hangs here!

I'm not sure if we used to make the listen socket non-blocking
explicitly before, but _removing_ calls to make stuff non-blocking was
part of Evgeny's "optimization" work. Maybe he went a bit overboard, I
certainly agree that _if_ there was a change like that it probably was
unintentional and should have been avoided.

Evgeny: could you check, and re-add the logic to make the listen socket
explicitly non-blocking also IF it was passed in from the outside to
MHD, and then make a fast bugfix release? Thanks!

On 04/12/2016 04:10 PM, Markus Doppelbauer wrote:
Hello, Thanks a lot. For me, 0.9.49 does not work - it never enters the "AccessHandlerCallback()" handler. I have attached a small testcase. Steps to reproduce: g++ -o testmhd test.cpp -I/tmp/libmicrohttpd-0.9.49/src/include/ -L/tmp/libmicrohttpd-0.9.49/src/microhttpd/.libs/ -lmicrohttpd LD_LIBRARY_PATH=/tmp/libmicrohttpd-0.9.49/src/microhttpd/.libs/ ./testmhd wget -O /dev/null Best wishes, Markus Am Samstag, den 09.04.2016, 16:39 +0200 schrieb Christian Grothoff:
Dear all, I'm happy to announce the release of libmicrohttpd 0.9.49. GNU libmicrohttpd is a small C library that is supposed to make it easy to run an HTTP server as part of another application. GNU libmicrohttpd is fully HTTP 1.1 compliant and supports IPv6. Finally, GNU libmicrohttpd is fast, portable and has a simple API and (without TLS support and other optional features) a small binary size (~32k). Major changes include: * use US-ASCII only (instead of user locale settings) when performing caseless string comparison. * Send response properly if sendfile() failed with EINVAL * do not crash if pthread_create() fails * various minor bugfixes (see ChangeLog) * use non-blocking sockets on all platforms * various improvements to the documentation * reducing number of system calls You can download GNU libmicrohttpd from * and all GNU FTP mirrors. * Our Subversion repository at Please report bugs to our bugtracker at The documentation (including a reference manual and tutorial) can be found at Happy hacking! Christian & Evgeny

reply via email to

[Prev in Thread] Current Thread [Next in Thread]