Portál AbcLinuxu, 12. května 2025 03:25

Dotaz: C: send() - potvrzení přijetí odeslaného paketu

Fuky avatar 28.2.2007 17:12 Fuky | skóre: 52 | blog: 4u
C: send() - potvrzení přijetí odeslaného paketu
Přečteno: 157×
Odpovědět | Admin

Po neblokovaném TCP spojení odesílám data pomocí send(). Když vytáhnu kabel, tak se mi ještě několikrát úspěšně zavolá send() a teprve po chvíli se dozvím od select(), který volám před ní, že nelze do soketu zapisovat. Po zastrčení kabelu zpět se neodeslaná data odešlou a select() mi dovolí odesílat další data.

Lze nějaký způsobem zjistit, která data se nepodařilo odeslat, aniž by jsem do svého protokolu implementoval potvrzování přijatých dat, když by jsem kabel nevrátil zpět?

Představuji si to asi takto. Zavolám send() a nezavolám ho znovu dříve než dostanu od OS potvrzení, že se mu data podařilo odeslat. OS dám na toto potvrzení 2s, jinak uzavřu spojení a další navážu až za 50s, protože mám zaručeno, že protistrana do té doby spojení také uzavře, když jí ode mě nepřijdou žádná data. Lze něco takového realizovat nebo jsem úplně mimo?

-- RÁMO: psí tábor , ETriatlon: Výuka plavání

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Josef Kufner avatar 28.2.2007 18:59 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: C: send() - potvrzení přijetí odeslaného paketu
Odpovědět | | Sbalit | Link | Blokovat | Admin
O tohle se ti právě stará TCP. Pokud chceš nějaký další kontroly, implementuje je ve svém protokolu o úroveň výš. Třeba aby jsi posílal data po nějakých blocích a druhá strana ti posílala potvrzení. Něco jako HTTP pozpátku ;-)

Případně zvaž, zda nebude na tohle vhodnější použít UDP.
Hello world ! Segmentation fault (core dumped)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.