Сообщение RST на клиенте после socketclose на сервере от 11.04.2018 14:31
Изменено 11.04.2018 14:32 tdiff
RST на клиенте после socketclose
Привет,
Клиент и сервер общаются по простому протоколу:
-- client
send()
send()
shutdown(SHUT_WR)
read()
...
-- server
read()
...
send()
closesocket()
При этом клиент после closesocket() периодически получает RST. В моём понимании, это означает, что на сервере в recv queue ещё лежат непрочитанные данные. Проблема проходит, если перед closesocket() вызвать shutdown(SHUT_BOTH). Как можно объяснить такое поведение?
Дополнительно меня смущает, что если перед shutdown() и socketclose() сделать recv(), то он всё равно прочитает 0 байт.
Платформа Win 7.
Клиент и сервер общаются по простому протоколу:
-- client
send()
send()
shutdown(SHUT_WR)
read()
...
-- server
read()
...
send()
closesocket()
При этом клиент после closesocket() периодически получает RST. В моём понимании, это означает, что на сервере в recv queue ещё лежат непрочитанные данные. Проблема проходит, если перед closesocket() вызвать shutdown(SHUT_BOTH). Как можно объяснить такое поведение?
Дополнительно меня смущает, что если перед shutdown() и socketclose() сделать recv(), то он всё равно прочитает 0 байт.
Платформа Win 7.
RST на клиенте после socketclose
Привет,
Клиент и сервер общаются по простому протоколу:
-- client
send()
send()
shutdown(SHUT_WR)
read()
...
-- server
read()
...
send()
closesocket()
При этом клиент после closesocket() периодически получает RST. В моём понимании, это означает, что на сервере в recv queue ещё лежат непрочитанные данные. Но:
1. если перед socketclose() сделать recv(), то он прочитает 0 байт.
2. проблема проходит, если перед closesocket() вызвать shutdown(SHUT_BOTH).
Как можно объяснить такое поведение?
Платформа Win 7.
Клиент и сервер общаются по простому протоколу:
-- client
send()
send()
shutdown(SHUT_WR)
read()
...
-- server
read()
...
send()
closesocket()
При этом клиент после closesocket() периодически получает RST. В моём понимании, это означает, что на сервере в recv queue ещё лежат непрочитанные данные. Но:
1. если перед socketclose() сделать recv(), то он прочитает 0 байт.
2. проблема проходит, если перед closesocket() вызвать shutdown(SHUT_BOTH).
Как можно объяснить такое поведение?
Платформа Win 7.