Стороной, которая была инициирована закрытие соединения, является та, которая заканчивается в состоянии TIME_WAIT
. read()
возврат 0 должен указывать на то, что сервер сначала закрыл сокет, так что да - это должно означать, что TIME_WAIT
заканчивается на стороне сервера, а клиент проходит через LAST_ACK
.
В конце дня вы не можете избежать состояния TIME_WAIT
. Даже если вам удастся перенести его с сервера на сервер, вы все равно не сможете повторно использовать этот кортеж (server host, server port, client host, client port)
до тех пор, пока TIME_WAIT
не закончится (независимо от того, на какой стороне он включен).
Так как три части этого кортежа зафиксированы в вашем сценарии (server host
, server port
, client host
), у вас действительно есть только такие опции:
bind()
/ connect()
в цикле до тех пор, пока соединение не будет работать. client host
значений, используя несколько IP-адресов на вашем клиенте. Вы должны будете иметь приложение bind()
к одному из этих IP-адресов, особенно. server host
/ server port
значений, используя несколько портов и / или IP-адреса на сервере. Да, вы просто добавляете логику и можете указать дизайн с помощью этого метода:
Более распространенным соглашением является использование ssrsReportStr([SSRSReport],[Design])
, и вы можете увидеть пример здесь: \Classes\AgreementConfirmController\main