Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  Boost.Asio TCP ühenduse katkemise avastamine märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
Bssldr
HV kasutaja

liitunud: 05.12.2009




sõnum 18.03.2011 15:53:53 Boost.Asio TCP ühenduse katkemise avastamine vasta tsitaadiga

Oletame, et luuakse TCP ühendus ja mingil perioodil andmeid ei saadeta. Sellel perioodil aga näiteks tõmmatakse ühenduse loonud masina tagant võrgukaabel ära. Kuidas peaks nüüd tegema kindlaks, et ühendust enam pole? Üks võimalus oleks vaadata, kas boost::asio::ip::tcp::socket.send() failib, aga ei tahaks mõttetuid andmeid saata.

Kui nüüd Winsock poole vaadata, kas siis sealne select() funktsioon oleks antud olukorras abiks?
Kommentaarid: 9 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 8
tagasi üles
vaata kasutaja infot saada privaatsõnum
Supiplex
HV veteran
Supiplex

liitunud: 11.12.2002




sõnum 18.03.2011 19:07:44 vasta tsitaadiga

Miks sa tahad seda eraldi kontrollida? Tee oma tavalist tööd. Seda et ühendust enam pole saad teada kui socket saatmisel või vastuvõtmisel vea annab. Kas see ei kõlba?

Ega sisuliselt muud väljapääsu pole kui tuleb midagi saata ja vaadata kas vastus tuleb. Seda teeb heal juhul TCP/IP stäkk ka sinu eest.
Taustast: http://tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/
Iva: http://stackoverflow.com/questions/1511129/boostasioiptcpsocket-is-connected

_________________
The young lady had an unusual list,
Linked in part to a structural weakness.
She set no preconditions.
Kommentaarid: 38 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 34
tagasi üles
vaata kasutaja infot saada privaatsõnum
Bssldr
HV kasutaja

liitunud: 05.12.2009




sõnum 18.03.2011 19:52:11 vasta tsitaadiga

Sellist kontrollimist võib vaja minna tegelikult pigem siis, kui on tegemist serveriga ja see parajasti kliendilt midagi ootab. TCP keep-alive on tõesti üks lahendus, aga Windowsi all tuleb kindlasti WinAPI funktsioonidega uus timeout paika panna. Boostis võib ju keep-alive peale lükata, aga default timeout on ~2 tundi, mida on liiga palju.
Kommentaarid: 9 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 8
tagasi üles
vaata kasutaja infot saada privaatsõnum
Supiplex
HV veteran
Supiplex

liitunud: 11.12.2002




sõnum 19.03.2011 13:39:30 vasta tsitaadiga

Bssldr kirjutas:
Sellist kontrollimist võib vaja minna tegelikult pigem siis, kui on tegemist serveriga ja see parajasti kliendilt midagi ootab. TCP keep-alive on tõesti üks lahendus, aga Windowsi all tuleb kindlasti WinAPI funktsioonidega uus timeout paika panna. Boostis võib ju keep-alive peale lükata, aga default timeout on ~2 tundi, mida on liiga palju.


Jah, lisaks kipuvad opsüsteemis need TCP/IP parameetrid, sunnikud, globaalsed olema.

Kui TCP protokolli sisseehitatud variant ei sobi, siis pole sul muud valikut kui ise teha. Ma oletan et sa arendad mingit iseenda protokolli. Seal defineeridki mingi lihtsa pingi-laadse diagnostika. Pingi saadad teisele poolele soovitud sagedusega ja ootad vastust täpselt nii kaua kui tahad.

_________________
The young lady had an unusual list,
Linked in part to a structural weakness.
She set no preconditions.
Kommentaarid: 38 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 34
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  Boost.Asio TCP ühenduse katkemise avastamine
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.