Мы используем Linux 2.6.33 на устройстве. Будет использоваться приложение для ПК, которое подключается к устройству через сокет TCP. На запрос из приложения будет передано не более 1 МБ данных.Как быстро закрыть TCP-сокет и снова подключиться
Рассмотрите, если приложение подключено и работает нормально и между IP-адресом устройства будет изменено (что возможно с помощью команды). Теперь соединение прерывается в приложении, но на устройстве его нет. Но пользователь надеется подключиться к устройству с новым IP-адресом. В некоторых случаях «send()» был на полпути и, возможно, не отправлял все данные, тогда это закрытие не происходит немедленно, и, следовательно, пользователь не сможет подключиться, пока гнездо не будет закрыто на устройстве.
Я использую «выключение (носок, RDWR), закрыть (носок)» последовательность в Netstat выходных показывает:.
$ netstat -nt
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 29200 xx.xx.xx.xx:3000 xx.xx.xx.xx:50639 ESTABLISHED
Как показывает Send-Q еще не пуст, и поэтому соединение все еще находится в ESTABLISED состояния этого. сокет закрывается через некоторое время, и я не уверен, сколько времени это возможно. Может определяться реализацией сокета.
Как я могу закрыть t его сокет немедленно, чтобы можно было установить новое соединение через тот же TCP-порт из приложения ПК?
Это определяется временем, которое требуется для завершения ожидающих отправлений или отмены их, если они не подтверждаются. Я не понимаю, что «пользователь надеется подключиться к устройству с новым IP-адресом». Почему новый IP-адрес? – EJP
Поскольку IP-адрес Ethernet изменяется с помощью команды пользователя. Теперь пользователю необходимо снова запустить приложение с новым IP-адресом сразу после изменения IP-адреса. –
Как узнать время, необходимое для закрытия этого потерянного сокета, отбросив ожидающие пакеты отправки-Q? –