Что вызывает ошибку ENOTCONN?

Хорошие решения здесь, но помните, что кварталы могут меняться в зависимости от компании / отрасли. Иногда квартал может отличаться от трех месяцев.

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

18
задан Vasily Kabunov 10 October 2017 в 11:46
поделиться

3 ответа

Если вы уверены, что ничто на вашей стороне TCP-соединения не закрывает соединение, мне кажется, что удаленная сторона закрывает соединение.

ENOTCONN , как указывали другие, просто означает, что сокет не подключен. Это не обязательно означает, что соединение не удалось. Сокет вполне мог быть подключен ранее, просто во время вызова это не привело к ENOTCONN .

Это отличается от:

  • ECONNRESET : другой конец соединение отправило пакет сброса TCP. Это может произойти, если другой конец, помимо прочего, отказывает в соединении или не подтверждает, что он уже подключен.
  • ETIMEDOUT : обычно это применимо только к connect . Это может произойти, если попытка подключения не удалась в течение зависящего от системы промежутка времени.

EPIPE иногда может возвращаться некоторыми системными вызовами, относящимися к сокету, при условиях, более или менее тех же, что и ENOTCONN . Например, в некоторых системах EPIPE и ENOTCONN являются синонимами, когда возвращаются send .

Хотя это не является необычным для выключения чтобы вернуть ENOTCONN , поскольку эта функция должна разорвать TCP-соединение, я был бы удивлен, увидев close return ENOTCONN . На самом деле этого никогда не следует делать.

Наконец, как упоминалось в dwc, EBADF не должен ' t применяется в вашем сценарии, если вы не пытаетесь выполнить какую-либо операцию с файловым дескриптором, который уже был close d. Отключение сокета (т.е. разрыв TCP-соединения) - это не то же самое, что закрытие файлового дескриптора, связанного с этим сокетом.

19
ответ дан 30 November 2019 в 08:53
поделиться

Транспортная конечная точка не подключена

Сокет связан с протоколом, ориентированным на соединение, и не был подключен. Обычно это ошибка программирования.

От: http://www.wlug.org.nz/ENOTCONN

0
ответ дан 30 November 2019 в 08:53
поделиться

Если вы уверены, что в первую очередь правильно подключились, ENOTCONN , скорее всего, вызвано закрытием fd на вашем конце (возможно, в другом потоке?), пока вы находитесь в середине запроса, или из-за разрыва соединения, пока вы находитесь в середине запроса.

В любом случае это означает, что сокет Не подключен. Идите и очистите розетку. Он мертв. Нет проблем с вызовом close () или shutdown () на нем.

0
ответ дан 30 November 2019 в 08:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: