Настройка времени ожидания сокета TCP - PullRequest
2 голосов
/ 13 мая 2009

У меня есть приложение Java, которое использует сторонний компонент COM через мост Java-COM. Этот COM-компонент открывает сокет-соединение с удаленным хостом.

Этот хост может занять некоторое время, чтобы ответить, и я подозреваю, что у меня истекло время ожидания. Я не уверен, потому что, как я уже сказал, это сторонний компонент с закрытым исходным кодом.

API этого компонента не предоставляет мне сокетное соединение, поэтому у меня нет возможности настроить время ожидания. Поэтому мне интересно, есть ли способ настроить тайм-аут системы по умолчанию.

Я использую Windows Server 2008 x64 Enterprise Edition.

Ответы [ 4 ]

2 голосов
/ 01 июня 2009

Хотите ли вы построить свое приложение так, чтобы оно во время выполнения знало, произошел ли тайм-аут или вы хотите проверить поведение COM-компонента с закрытым исходным кодом? Если это последнее, установите Wireshark на своем устройстве разработчика и наблюдайте за подключением. Если это первое, хотите ли вы, чтобы ваш вызов Java на родину не зависал вечно? Если это так, загляните в службу поддержки java.util.concurrent executor - есть способ вызвать метод в другом потоке и подождать максимум N секунд, прежде чем вернуть управление вашему потоку.

1 голос
/ 04 июня 2009

Если вы хотите, чтобы соединение установилось, а затем, возможно, пропало из-за таймаута, вы можете использовать TCPview: http://technet.microsoft.com/en-us/sysinternals/bb897437.aspx

0 голосов
/ 24 мая 2009

Параметры реестра, описанные в разделе «Параметры конфигурации Tcp Ip Windows Vista» в Microsoft для TcpMaxDataRetransmissions, могут позволить вам установить необходимые глобальные таймауты.

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

0 голосов
/ 13 мая 2009

Вы можете представить свой собственный SocketImplFactory (см. Статический метод setSocketImpl () класса java.net.Socket). Затем вы можете создавать объекты SocketImpl со своим собственным значением параметра SO_TIMEOUT.

...