Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Jan Karasek 08. 08. 2022, 12:27:10

Název: TIME_WAIT po ukončení socket-komunikace
Přispěvatel: Jan Karasek 08. 08. 2022, 12:27:10
provozuji běžnou client-server-komunikaci přes AF_INET,SOCK_STREAM a myslím (doufám), že jsem všechno potřebné 'opsal' z internetu správně.
Pomocí 'netstat' vidím, že ještě 60 vteřin poté, co jak client tak server skončí, existuje záznam s TIME_WAIT pro již neexistující proces. Tento záznam neblokuje žádnou další komunikaci přes ten samý port k té samé IP adrese. Nemusím tedy používat nějake finty s SO_REUSEADDR a podobně. Jedině snad by mohly dojit porty, protože začínám od portu 50000 a každá další komunikace obsadí interně nový port ca. od 58000 , takže kdybych v průběhu té 1 minuty nastartovat 10000 nových spojení, tak pak by nebyl žádný port volný. S tím mohu (a zákazník)  žít.
Přes to bych se rád zkušených network-propgramátorů zeptal, zda je možno socket komunikaci naprogramovat tak, aby se ten TIME_WAIT vůbec neobjevoval.
Název: Re:TIME_WAIT po ukončení socket-komunikace
Přispěvatel: Filip Jirsák 08. 08. 2022, 12:56:57
Takhle je to správně. Ta lhůta je tam proto, že i po ukončení spojení mohou dorazit pakety, které patří do toho spojení. Je lepší je umět zařadit, kam patřily, než je brát jako neznámé pakety (nebo v horším případě je zařadit do jiného spojení, kam by podle portů mohly spadnout).
Název: Re:TIME_WAIT po ukončení socket-komunikace
Přispěvatel: kvr kvr 08. 08. 2022, 13:21:58
Obvykle je to kvůli chybějícímu shutdown() .  Samotný close() nestačí, bo ten vzniká i automaticky se zánikem procesu a není jasné, jestli ještě něco odněkud nepřijde.
Název: Re:TIME_WAIT po ukončení socket-komunikace
Přispěvatel: Jan Karasek 09. 08. 2022, 21:29:14
Obvykle je to kvůli chybějícímu shutdown() .  Samotný close() nestačí, bo ten vzniká i automaticky se zánikem procesu a není jasné, jestli ještě něco odněkud nepřijde.

diky za obe odpovedi. To s tim shutdownem jsem u klienta uz zkusil, to zatim nic neprineslo. Ale jak jsem pochopil predrecnika, tak uplne silena situace to neni, takze jsem se uklidnil a zatim to necham bezet.
Název: Re:TIME_WAIT po ukončení socket-komunikace
Přispěvatel: RDa 09. 08. 2022, 21:52:19
Zkuste spojeni uzavirat z druhe strany nez delate ted (napr. rozsirenim protokolu o exit prikaz)
Název: Re:TIME_WAIT po ukončení socket-komunikace
Přispěvatel: mark42 10. 08. 2022, 12:40:20
Tu je obrazok, ako TCP komunikacia prebieha, TIME_WAIT je vzdy na tej strane, ktora iniciuje zrusenie spojenia. Ak ju uzavries z opacnej strany, tak bude TIME_WAIT tam. Ale ako si pisal vyssie, nie je tam dovod na paniku.
(https://upload.wikimedia.org/wikipedia/commons/thumb/a/a2/Tcp_state_diagram_fixed.svg/796px-Tcp_state_diagram_fixed.svg.png)