URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3310
[ Назад ]

Исходное сообщение
"TIME_WAIT"

Отправлено Brick , 23-Авг-04 10:44 
Добрый день!

Как заставить приложение не оставлять соединений такого типа: "tcp4       0      0  192.168.0.1.63009      192.168.0.1.2156       TIME_WAIT"???

Всем заранее спасибо.


Содержание

Сообщения в этом обсуждении
"TIME_WAIT"
Отправлено XMan , 23-Авг-04 17:10 
setsockopt(сокет,SOL_SOCKET,SO_REUSEADDR,(char *)&i,sizeof(i))

где int i=1

man socket


"TIME_WAIT"
Отправлено Brick , 25-Авг-04 15:11 
>setsockopt(сокет,SOL_SOCKET,SO_REUSEADDR,(char *)&i,sizeof(i))
>
>где int i=1
>
>man socket

это только отключает сообщение об ошибке:"address already in use", а мне надо, чтобы соединения именно пропадали, а они висят,как зомби :(


"TIME_WAIT"
Отправлено klalafuda , 25-Авг-04 16:13 
>>setsockopt(сокет,SOL_SOCKET,SO_REUSEADDR,(char *)&i,sizeof(i))
>>
>>где int i=1
>>
>>man socket
>
>это только отключает сообщение об ошибке:"address already in use", а мне надо,
>чтобы соединения именно пропадали, а они висят,как зомби :(

правильный ответ - никак. за подробностями "почему" почитайте умные книжки типа Стивенса.

// wbr


"TIME_WAIT"
Отправлено XMan , 25-Авг-04 18:32 
klalafuda правильно сказал. Единственное неудобство такого состояния - это невозможность запустить программу еще раз, пока состояние не отвалится. В разных ОС на это отводится разное время, но обычно порядка 2-3 минут.

Потому я тебе и сказал пользовать REUSE_ADDR. Это не "только отключает сообщение об ошибке" - это позволяет опять захватить этот порт без ожидания этих самых 2-3 минут.


"TIME_WAIT"
Отправлено klalafuda , 25-Авг-04 18:38 
>klalafuda правильно сказал. Единственное неудобство такого состояния - это невозможность запустить программу
>еще раз, пока состояние не отвалится. В разных ОС на это
>отводится разное время, но обычно порядка 2-3 минут.
>
>Потому я тебе и сказал пользовать REUSE_ADDR. Это не "только отключает сообщение
>об ошибке" - это позволяет опять захватить этот порт без ожидания
>этих самых 2-3 минут.

ну тогда уж SO_REUSEPORT

---man getsockopt---
SO_REUSEPORT    enables duplicate address and port bindings
---man getsockopt---

// wbr


"TIME_WAIT"
Отправлено XMan , 25-Авг-04 19:51 
В данном случае они одинаковы по своему действию.

"TIME_WAIT"
Отправлено qq , 26-Авг-04 01:42 
>Добрый день!
>
>Как заставить приложение не оставлять соединений такого типа: "tcp4    
>   0      0  
>192.168.0.1.63009      192.168.0.1.2156    
>  TIME_WAIT"???
>
>Всем заранее спасибо.

вот, чё люди пишут по этому поводу:
http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&c2coff=1&...$%p1.105867406@newssvr30.news.prodigy.com

TIME_WAIT is the state
that a socket goes into _after_ a graceful shutdown has been completed, and it
stays there for four minutes (2*MSL, to be exact).  This is, however, a normal
and desired state for such a socket to be in, so that any packets, duplicated,
retried, or erroneous, still bouncing around in the network get a proper
response.

TIME_WAIT is good.  In a properly written socket stack, TIME_WAIT sockets
aren't as "heavy" as open sockets (they only need to contain the source and
remote addresses and ports, and the fact that the socket is in TIME_WAIT
state), and so shouldn't noticeably impact the number of other sockets that
can be open.