Закрытие соединения C TCP

#c #networking #tcp

#c #сеть #tcp

Вопрос:

У меня есть приложение C под названием A, которое открывает TCP-соединение с приложением B. Приложение C знает об этом соединении и может закрыть сокет со стороны B. Мой вопрос: как я могу узнать, закрылось ли соединение при правильном закрытии, или это проблема с сетевым подключением? В настоящее время у меня есть тайм-аут, который знает, когда нет приема, но это не указывает на правильное закрытие или проблему с сетевым подключением.

Я слышал, что, поскольку это TCP-соединение, если приложение C правильно закрывает соединение, ОС должна знать об этом, вы знаете, как я могу узнать в приложении A, что соединение закрыто правильно?

если вы можете прикрепить образец c , это будет полезно.

Ответ №1:

Если соединение было закрыто правильно, recv() вернет ноль. Если оно было закрыто неправильно, recv() в конечном итоге отключится (хотя для этого могут быть другие причины), а send() в конечном итоге вернет -1 с ошибкой ECONNRESET или как бы она ни называлась.