TIME_WAIT po ukončení socket-komunikace

TIME_WAIT po ukončení socket-komunikace
« kdy: 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.


Re:TIME_WAIT po ukončení socket-komunikace
« Odpověď #1 kdy: 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).

Re:TIME_WAIT po ukončení socket-komunikace
« Odpověď #2 kdy: 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.

Re:TIME_WAIT po ukončení socket-komunikace
« Odpověď #3 kdy: 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.

RDa

  • *****
  • 2 822
    • Zobrazit profil
    • E-mail
Re:TIME_WAIT po ukončení socket-komunikace
« Odpověď #4 kdy: 09. 08. 2022, 21:52:19 »
Zkuste spojeni uzavirat z druhe strany nez delate ted (napr. rozsirenim protokolu o exit prikaz)


mark42

  • ***
  • 133
    • Zobrazit profil
    • E-mail
Re:TIME_WAIT po ukončení socket-komunikace
« Odpověď #5 kdy: 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.