В настоящее время я поддерживаю некоторое программное обеспечение веб-сервера, и мне нужно выполнить много операций ввода-вывода. Сигналы read()
, write()
, close()
и shutdown()
, при использовании в сокете могут иногда поднять ошибку ENOTCONN
. Что именно означает эта ошибка? Каковы условия, которые могут вызвать это? Я никогда не могу воспроизвести его локально, но есть пользователи, которые могут.Что вызывает ошибку ENOTCONN?
Прямо сейчас я просто игнорирую ENOTCONN
, когда поднял close()
и shutdown()
, потому что кажется безобидным, но я не совсем уверен.
EDIT:
- Я абсолютно уверен, что
connect()
вызов удалось. Я проверяю его возвращаемое значение. ENOTCONN
чаще всего поднимаетсяclose()
иshutdown()
. Я очень редко виделread()
иwrite()
, поднимаяENOTCONN
.
Какая операционная система? Я отслеживаю аналогичную проблему при работе с старой системой Solaris 10. Благодарю. – Nemo
В основном FreeBSD.В то же время я обнаружил, что во FreeBSD есть ошибки ядра, которые могут вызвать close() и shutdown(), чтобы ошибочно возвращать ENOTCONN при работе с сокетами Unix. Solaris также имеет различные ошибки ядра w.r.t. Unix, но я обнаружил ошибки в connect(). – Hongli