tcpip nonblocking socket mit keepalive option

Gast #1083692
Hallo,
ich habe zwei eingebettete systeme (arm9 (A) und coldfire (B) auf 
dilnet-pc von SSV) auf denen Linux läuft (ein uclinux auf der 
coldfirevariante und das andere liefert bei cat /proc/version "Linux 
version 2.6.16.20-at91-ssv1"). Diese unterhalten sich miteinander über 
tcpip. Jetzt möchte ich, wenn (B) sich verabschiedet, ohne die 
Verbindung "ordnungsgemäß" zu beenden, dass (A) das irgendwie 
mitbekommt. Dazu habe ich dann folgendes HOWTO gefunden:

http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/index.html

die keepalive-option sieht vor, dass in regelmäßigen intervallen 
testpakete gesendet werden, die wie es das tcp/ip-protokoll vorsieht, 
vom host beantwortet werden.

man kann die keepalive-Option im code mittels
1
setsockopt(int socket, int level, int optname,
2
                 const void *optval, socklen_t optlen)

aktivieren.

Nun ist es so, das ich meinen Socket non-blocking gesetzt habe. Nehme 
ich dieses Flag raus, funktioniert die keepalive-option tadellos.
Daher meine Frage: Warum kommt tcp keepalive nicht mit non-blocking 
sockets zurecht?
soll ich mehr code posten?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.