LINUX.ORG.RU

История изменений

Исправление gh0stwizard, (текущая версия) :

Теперь я знаю, почему хаскель не надо использовать :)
Первое, что надо знать - закрытие сокета не означает его пропадание из ОС.
Второе, в хаскеле как и во всех других ЯП освобождение fd происходит только тогда, когда его освободила (и перед этим закрыла) программа. Иначе, вступают в силу настройки ОС: TIME_WAIT, FIN_WAIT и т.п. Если сокеты висят в ОС даже после закрытия, значит освободи их программой!

Использовать SO_LINGER нужно только тогда, когда клиент/сервер написаны криво и не умеют закрывать сокеты одновременно. Т.е. один из них игнорирует посылку fin ack.

Кроме close() иногда надо прямо использовать shutdown(fd, 2)

Исправление gh0stwizard, :

Теперь я знаю, почему хаскель не надо использовать :)
Первое, что надо знать - закрытие сокета не означает его пропадание из ОС.
Второе, в хаскеле как и во всех других ЯП освобождение fd происходит только тогда, когда его освободила (и перед этим закрыла) программа. Иначе, вступают в силу настройки ОС: TIME_WAIT, FIN_WAIT и т.п. Если сокеты висят в ОС даже после закрытия, значит освободи их программой!

Использовать SO_LINGER нужно только тогда, когда клиент/сервер написаны криво и не умеют закрывать сокеты одновременно. Т.е. один из них игнорирует посылку fin ack.

Исправление gh0stwizard, :

Теперь я знаю, почему хаскель не надо использовать :)
Первое, что надо знать - закрытие сокета не означает его пропадание из ОС.
Второе, в хаскеле как и во всех других случаях освобождение fd происходить только тогда, когда его освободила программа. Иначе, вступают в силу настройки ОС: TIME_WAIT, FIN_WAIT и т.п. Если сокеты висят в ОС даже после закрытия, значит освободи их программой!

Использовать SO_LINGER нужно только тогда, когда клиент/сервер написаны криво и не умеют закрывать сокеты одновременно. Т.е. один из них игнорирует посылку fin ack.

Исходная версия gh0stwizard, :

Теперь я знаю, почему хаскель не надо использовать :)
Первое, что надо знать - закрытие сокета не означает его пропадание из ОС.
Второе, в хаскеле как и во всех других случаях освобождение fd происходить только тогда, когда его освободила программа. Иначе, вступают в силу настройки ОС: TIME_WAIT, FIN_WAIT и т.п. Если сокеты висят в ОС даже после закрытия, значит освободи их программой!