Хорошие решения здесь, но помните, что кварталы могут меняться в зависимости от компании / отрасли. Иногда квартал может отличаться от трех месяцев.
Вы, вероятно, хотите расширить или инкапсулировать класс календаря, чтобы настроить его для своих задач, а не написать какую-нибудь служебную функцию, которая преобразует его. Ваше приложение, вероятно, достаточно сложное в этой области, чтобы вы могли найти другие применения для своего нового календарного класса - я обещаю, что вы будете рады, что вы расширили или инкапсулировали его, даже если сейчас это кажется глупым.
Если вы уверены, что ничто на вашей стороне TCP-соединения не закрывает соединение, мне кажется, что удаленная сторона закрывает соединение.
ENOTCONN
, как указывали другие, просто означает, что сокет не подключен. Это не обязательно означает, что соединение
не удалось. Сокет вполне мог быть подключен ранее, просто во время вызова это не привело к ENOTCONN
.
Это отличается от:
ECONNRESET
: другой конец соединение отправило пакет сброса TCP. Это может произойти, если другой конец, помимо прочего, отказывает в соединении или не подтверждает, что он уже подключен. ETIMEDOUT
: обычно это применимо только к connect
. Это может произойти, если попытка подключения не удалась в течение зависящего от системы промежутка времени. EPIPE
иногда может возвращаться некоторыми системными вызовами, относящимися к сокету, при условиях, более или менее тех же, что и ENOTCONN
. Например, в некоторых системах EPIPE
и ENOTCONN
являются синонимами, когда возвращаются send
.
Хотя это не является необычным для выключения
чтобы вернуть ENOTCONN
, поскольку эта функция должна разорвать TCP-соединение, я был бы удивлен, увидев close
return ENOTCONN
. На самом деле этого никогда не следует делать.
Наконец, как упоминалось в dwc, EBADF
не должен ' t применяется в вашем сценарии, если вы не пытаетесь выполнить какую-либо операцию с файловым дескриптором, который уже был close
d. Отключение сокета (т.е. разрыв TCP-соединения) - это не то же самое, что закрытие файлового дескриптора, связанного с этим сокетом.
Транспортная конечная точка не подключена
Сокет связан с протоколом, ориентированным на соединение, и не был подключен. Обычно это ошибка программирования.
Если вы уверены, что в первую очередь правильно подключились, ENOTCONN
, скорее всего, вызвано закрытием fd
на вашем конце (возможно, в другом потоке?), пока вы находитесь в середине запроса, или из-за разрыва соединения, пока вы находитесь в середине запроса.
В любом случае это означает, что сокет Не подключен. Идите и очистите розетку. Он мертв. Нет проблем с вызовом close ()
или shutdown ()
на нем.