weryfikacja czy host po drugiej stronie gniazda "żyje" - linux

0

Spotkałem się z ciekawym problemem, mając dwa procesy chcę by jeden monitorował czy drugi żyje. Problem może wydawać się banalny, bo przecież można wykorzystać selecta, recv itp.
Mimo tego chciałbym się zabezpieczyć na wypadek gdyby monitorowany proces nie wysłał close ( na którym oparty jest recv czy select). Jak wykryć sytuację, w której są np. problemy z siecią albo proces "padając" nie wysłał close'a ?

0

Jeśli socket się zamknie bo druga strona padła to recv wróci nie wyczytując danych i zasygnalizuje zerwanie połączenia. Nie rozumiem gdzie jest problem.

0

" In the case of a recv, if an intermediate router goes down or the remote host closes the socket abnormally (without sending a close), no packet will ever arrive to alert the socket stack that the recv is waiting on a shutdown connection."

http://stackoverflow.com/questions/4142012/how-to-find-the-socket-connection-state-in-c

0

Rozwiązaniem może być technika heartbeating-u (stosowana np. w Zeromq). Patrz http://lucumr.pocoo.org/2012/6/26/disconnects-are-good-for-you/

1 użytkowników online, w tym zalogowanych: 0, gości: 1