2010-11-11 5 views

ответ

0

VxWorks использует BSD Sockets API. Когда удаленная станция завершила соединение, функции ввода-вывода, такие как функции read() и write(), возвращают состояние ошибки (-1 для чтения/записи) и устанавливают errno.

+0

Спасибо за ваш ответ; на самом деле я хочу знать статус дескриптора сокета, не выдавая функцию чтения/записи. Существуют ли какие-либо методы для достижения этого? – Thangaraj

+0

Вы не можете узнать статус удаленной системы, если и до тех пор, пока вы не попытаетесь связаться с ней. В TCP/IP-соединении нет автоматического опроса. – Clifford

0

По крайней мере, в некоторых BSD полученных стеков я работал, вы можете проверить, был ли другой конец закрыт, используя getpeername(). В поддерживающих стеках это вернет -1 и установите ENOTCONN, если другой конец закрыл половину соединения.

Это позволяет запросить, вызвал ли другой конец функцию close(), не выполняя вызов чтения сокета. Вопреки тому, что было ранее указано, можно найти это из стека IP, не инициируя какое-либо соединение с другим концом, потому что стек IP получает уведомление FIN, когда другой конец закрывает половину соединения. Затем эта информация может использоваться стеком для уведомления будущих абонентов getpeername(), которые закрыли другой конец.

 Смежные вопросы

  • Нет связанных вопросов^_^