RST на клиенте после socketclose на сервере
От: tdiff  
Дата: 11.04.18 14:31
Оценка:
Привет,

Клиент и сервер общаются по простому протоколу:

-- client sends request
send()
send()
shutdown(SHUT_WR) -- starts waiting for a reply
read()
...

-- server accepts conn and reads request
read()
...
send(). -- writes reply
closesocket() --and immediately closes its socket

При этом клиент после closesocket() на сервере периодически получает RST. В моём понимании, это означает, что на сервере в recv queue ещё лежат непрочитанные данные. Но:
1. если перед socketclose() на сервере сделать recv(), то он прочитает 0 байт.
2. проблема проходит, если перед closesocket() на сервере вызвать shutdown(SHUT_BOTH).

Как можно объяснить такое поведение?

Платформа Win 7. SO_linger дефолтный.
Отредактировано 11.04.2018 20:07 tdiff . Предыдущая версия . Еще …
Отредактировано 11.04.2018 14:57 tdiff . Предыдущая версия .
Отредактировано 11.04.2018 14:32 tdiff . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.