Java: Как очистить привязки сокетов - PullRequest
0 голосов
/ 13 мая 2010

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

Как удалить привязку к порту, на который я нацеливаюсь, перед привязкой к нему?

Если это невозможно, то как я могу перехватить процесс непосредственно перед его завершением, чтобы я мог найти привязку сокета и закрыть его вручную?

@ Jason - Джейсон, но в этом случае я пишу Клиент и не имею доступа к серверу, порт, на который я ссылаюсь, находится на клиенте и является локальным. Есть ли способ очистить привязку порта перед попыткой подключения? Если нет, то есть ли способ перехватить прерывание процесса, как в perl есть способ перехватить сигнал 'die' и выполнить некоторую постобработку, есть ли в Java это? Если это так, я мог бы вызвать close () для соединения сокета

Ответы [ 3 ]

3 голосов
/ 13 мая 2010

По моему опыту, 9 раз из 10 ответом на этот класс проблем является «Поиск SO_LINGER».

Если вы отключите (буквально) от клиента, сервер с оптимизмом надеется, что вернется, чтобы собрать данные, которые вы уже отправили в этот сокет. Таким образом, он сохраняет эти данные и порт, пока не очистятся буферы.

Обычно на сервере вы хотите уничтожить эти буферы с предубеждением из-за только что обнаруженной вами атаки DOS (преднамеренной или случайной).

0 голосов
/ 28 мая 2010

Хорошо - я нашел способ перехватить сигналы Java, прочитав это руководство онлайн - http://www.ibm.com/developerworks/java/library/i-signalhandling/

Таким образом, можно перехватить сигнал матрицы и закрыть соединение.

0 голосов
/ 14 мая 2010

Не возитесь с SO_LINGER, это только добавляет небезопасности. Вопрос в том, почему вы вообще привязываетесь к локальному порту?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...