LINUX.ORG.RU
ФорумAdmin

Убить TCP connect


0

0

Имеется: два сервиса на разных машинах общаются по TCP. Иногда порядка 2 х раз в день рвётся соединение между ними. При этом, один его нормально теряет и заново пытается установить. У второго оно повисает в состоянии ESTABLISHED. Почему такое может происходить? Кто виноват: tcp/ip стэк, программа, сеть?

Возникает надобность его(коннект этот) пристрелить. Как? tcpkill - не работает, потому как ни одного пакета после этого глюка не проходит и tcpkill не может сформировать пакет и послать RST. (Ну или я исходники недопонял его). Дескриптор сокета я могу легко найти в /proc/PID. Можно его как-нить пристрелить через /proc? Спасибо.

у которого коннект виснет - ядро 2.6.9, у второго - 2.6.15, почитать что ли changelog'и =)

Nekto0n
() автор топика

Может включить tcp keepalive - тогда он сам будет прибивать отвалившееся соединение по таймауту...

slav ★★
()
Ответ на: комментарий от slav

>Может включить tcp keepalive - тогда он сам будет прибивать отвалившееся соединение по таймауту...

Будет ли это работать(т.е пакеты уходить по тайм-ауту), если соединение в состоянии ESTABLISHED повисает? # cat /proc/sys/net/ipv4/tcp_keepalive_time 7200

# cat /proc/sys/net/ipv4/tcp_keepalive_intvl 75

# cat /proc/sys/net/ipv4/tcp_keepalive_probes 9 Вроде как должно работать, а соединение всё равно висит хоть сколько.

Nekto0n
() автор топика
Ответ на: комментарий от Nekto0n

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

slav ★★
()

>два сервиса на разных машинах общаются по TCP

Кто клиент, кто сервер? Или там 2 сервера работают? Не совсем понятна схема работы. Что-то уж через-чур странно, что ESTABLISHED просто так висит. Должен уходить в TIMEOUT. tcpdump для висящего соединения.

markevichus ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.