libmicrohttpd
[Top][All Lists]
Advanced

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

Re: [libmicrohttpd] a strange thing when send call returns -1 in send_cl


From: Taehwan Weon
Subject: Re: [libmicrohttpd] a strange thing when send call returns -1 in send_cls()
Date: Fri, 31 Oct 2014 15:39:52 +0900


Hi,

I applied the final MHD update to my project.
Still some strange result.

Below is my MHD log generated by my custom send_param_adaptor()

15:31:58/000 {16138} [ INFO]  message repeated 8042083 times, MHD: socket 483 - 12165 bytes tried, but ret = -1, errno = 11
15:32:09/000 {16138} [ INFO]  message repeated 8534594 times, MHD: socket 483 - 12165 bytes tried, but ret = -1, errno = 11
15:32:20/000 {16138} [ INFO]  message repeated 8542227 times, MHD: socket 483 - 12165 bytes tried, but ret = -1, errno = 11
15:32:31/000 {16138} [ INFO]  message repeated 8546356 times, MHD: socket 483 - 12165 bytes tried, but ret = -1, errno = 11
15:32:32/889 {16132} [ INFO]  MHD: socket 479 - 385 bytes tried, but ret = -1, errno = 104
15:32:32/889 {16138} [ INFO]  MHD: socket 483 - 12165 bytes tried, but ret = -1, errno = 11
15:32:32/889 {16132} [ INFO]  MHD: Failed to send data: Connection reset by peer
(intentionally omitted) 
15:32:34/648 {16138} [ INFO]  MHD: socket 483 - 12165 bytes tried, but ret = -1, errno = 11
15:32:34/648 {16132} [ INFO]  MHD: Failed to send data: Connection reset by peer
15:32:34/648 {16138} [ INFO]  MHD: socket 483 - 12165 bytes tried, but ret = -1, errno = 11
15:32:45/000 {16138} [ INFO]  message repeated 8033311 times, MHD: socket 483 - 12165 bytes tried, but ret = -1, errno = 11

As you see, there are too many erroneous repeats on the socket even in error case. (errno is 11 (EAGAIN))
In such a case, I don't know what to do.


Thanks in advance.



------
weon


2014-10-30 0:53 GMT+09:00 Christian Grothoff <address@hidden>:
On 10/29/2014 08:42 AM, Taehwan Weon wrote:
> While testing our web-server (based on MHD 0.9.38), sometimes, I found
> heavy cpu load.
> It caused by infinite send_cls() calls because send call in send_cls()
> returned -1 with errno of 0.
>
> I read and read again send() manual page, but there is no mention about the
> case that send() returns -1 with errno of 0.

I agree, that's why our logic doesn't quite expect that. But, nobody
said libc/kernel isn't allowed to have bugs ;-).  So my suggestion would
be this: I modify MHD to handle this (by closing the connection, don't
see what else we can do), and you should please take it up with CentOS,
asking them to fix that send() call. (What might be relevant these days:
is this using GNU libc or diet libc / ulibc?)

> My current environment is:
>      OS Kernel :  2.6.32-358.11.5.el6.x86_64 (CentOS)
>      MHD options:  MHD_USE_POLL_INTERNALLY | MHD_USE_THREAD_PER_CONNECTION|
> MHD_USE_DEBUG;
>
>
> Any help will be highly appreciated.

I've patched MHD in SVN 34391, please let us know if that helps (note
that IF the kernel does return -1 on send() with no errno, the new logic
should simply close the connection).

Happy hacking!

Christian




--

원 태환 부사장/COO

()솔박스

서울시 강남구 역삼동 747-2 해성빌딩 7

T 02-2182-3600     F 02-2058-2651

M 010-3335-8258  E address@hidden


reply via email to

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