Как узнать статус дескриптора сокета в vxworks

Как я могу проверить состояние удаленного конца с помощью дескриптора сокета в vxworks. Я использую TCP соединение.

3 ответа

Решение

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

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

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

Другие вопросы по тегам