как фон У меня есть встроенное устройство, которое ведет переговоры с сторонним сервером по IP. Код на стороннем сервере вряд ли изменится. В недавнем выпуске я изменил функцию ip disconnect для вызова shutdown() перед вызовом метода close() (ранее он только что вызвал close()). Встроенное устройство отключается без завершения сеанса связи, если возникают определенные прерывания. Когда это происходит в неправильной точке сеанса, сервер теперь создает файл трассировки, который по разным причинам неприемлем для клиента. Это происходит только при вызове выключения, сервер рассматривает это как сообщение об ошибке (и создает файл трассировки), в то время как он рассматривает более резкое закрытие() как другую потерю связи, которая не требует трассировки.Berkley sockets shutdown функция, как важно?
Таким образом, очевидным решением является прекращение выключения выключения. Ответ г-на Барнса в этом question дает хорошее описание двух функций, но если вы знаете, что к конкретному сокету подключен только один процесс, есть ли причина использовать shutdown перед закрытием?
Спасибо, Патрик
Какой стек TCP вы используете во встроенном устройстве и на стороннем сервере? Не все стеки TCP имеют одинаковое поведение w.r.t. 'shutdown' против' close'. Кроме того, вы устанавливаете опцию 'SO_LINGER'? –
Как определить стек tcp?Мы используем SO_LINGER в конце. – Patrick
Начните с предоставления нам информации о том, какие операционные системы (или библиотеки) и версии задействованы. –