[ECONNREFUSED] && [EAGAIN]

Gena Makhomed gmm at csdoc.com
Sat Jul 12 00:01:25 MSD 2008


On Friday, July 11, 2008 at 8:22:54, Igor Sysoev wrote:

>> [ECONNREFUSED]
>> The target address was not listening for connections or refused the connection request. 
>>
>> [ECONNREFUSED] - это "refused request", когда ситуация persistent fail
>> на стороне сервера - "target address was not listening for connections",
>> или что-то не так с клиентским запросом - "or refused the connection request"
>> 
>> а переполнение backlog - это ситуация temporary fail
>> на стороне сервера, и поэтому возвращается [EAGAIN]?

IS> ECONNREFUSED - это, в случае TCP, получение пакета RST на стадии connect.
IS> Локальная сторона не знает, временно это или нет.

вот, нашел: в текущей версии стандарта - IEEE Std 1003.1, 2004 Edition
http://www.opengroup.org/onlinepubs/000095399/functions/xsh_chap02_03.html

[ECONNREFUSED]
    Connection refused. An attempt to connect to a socket was refused because
    there was no process listening or because the queue of connection requests
    was full and the underlying protocol does not support retransmissions.

протокол TCP retransmissions поддерживает,
поэтому Linux и не возвращает ECONNREFUSED
при переполнении backlog для TCP sockets ?

IS> Кстати, ситуация "target address was not listening for connections"
IS> может быть временной: сервер падает и через пару секунд его перезапускают.

может. но в тот момент когда сервер лежит - операционная система честно сообщает
"target address was not listening for connections" кодом ошибки [ECONNREFUSED].
а будет сервер перезапускаться или нет - операционной системе это неизвестно.

а когда переполнен backlog - система точно знает, что это временные проблемы.
и сообщает об этом кодом ошибки [EAGAIN]. (для nonblock unix domains sockets)

[EAGAIN]
    Resource temporarily unavailable. This is a temporary condition
    and later calls to the same routine may complete normally.

-- 
Best regards,
 Gena






More information about the nginx-ru mailing list