strange timeout error returned by kevent() in 6.0

Igor Sysoev is at rambler-co.ru
Tue Dec 6 11:35:08 PST 2005


On Tue, 6 Dec 2005, John-Mark Gurney wrote:

> Igor Sysoev wrote this message on Thu, Sep 01, 2005 at 18:26 +0400:
>> On Thu, 1 Sep 2005, Igor Sysoev wrote:
>>
>>> I found strange timeout errors returned by kevent() in 6.0 using
>>> my http server named nginx.  The nginx's run on three machines:
>>> two 4.10-RELEASE and one 6.0-BETA3.  All machines serve the same
>>> content (simple cluster) and each handles about 200 requests/second.
>>>
>>> On 6.0 sometimes (2 or 3 times per hour) in the daytime kevent()
>>> returns EV_EOF in flags and ETIMEDOUT in fflags, nevertheless:
>>>
>>> 1) nginx does not set any kernel timeout for sockets;
>>> 2) the total request time for such failed requests is small, 30 and so
>>> seconds.
>>
>> I have changed code to ignore the ETIMEDOUT error returned by kevent()
>> and found that subsequent sendfile() returned the ENOTCONN.
>>
>> By the way, why sendfile() may return ENOTCONN ?
>> I saw this error code on 4.x too.
>
> The reason that you are seeing ETIMEDOUT/ENOTCONN is that the connection
> probably ETIMEDOUT (aka timed out)... and so is ENOTCONN (no longer
> connected).. can you also do a read or a write to the socket successfully?

At least recv() returns ETIMEDOUT. I could not test write() right now.

> and sendfile(3) says:
> ERRORS
> 	[...]
>
>     [ENOTCONN]         The s argument points to an unconnected socket.
>
> and a glance at tcp(4) says:
> ERRORS
> 	[...]
>
>     [ETIMEDOUT]        when a connection was dropped due to excessive
>                        retransmissions;
>
> There's the answers...

Yes, it seems that ETIMEDOUT is retransmission failure. I've seen it in
experiment.

The strangeness is that I did not see this error on 4.10.
Only on 6.0 and recenty on 4.11. May be I will upgrade cluster machine
from 4.10 to 4.11 to see changes.


Igor Sysoev
http://sysoev.ru/en/


More information about the freebsd-net mailing list