Konfigurieren TCP_KEEPALIVE unter MAC OS X
Derzeit habe ich auf dieses problem: zu erkennen, wie unberechenbar Verbindung unterbrochen.
Verwendete ich SO_KEEPALIVE,TCP_KEEPIDLE,TCP_KEEPINTVL und TCP_KEEPCNT zu lösen, die es unter linux, das scheint jetzt adaequat.
Jedoch, ist Es wirklich dauerte eine lange Zeit, um herauszufinden, wie es klappt unter MAC OS X. Jemand schlug vor, mich zu drehen, um netinet/tcp_var.h, aber noch keines der oben genannten MAKRO gefunden wurde.
So, meine Frage ist,
Wie die Implementierung der TCP-KEEPALIVE-unter MAC OS X?
P. S.: mein MAC-OS-X-version 10.8.3 und mein gcc/g++ version ist 4.2.1
Jede Antwort wäre sehr hilfreich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tatsächlich, Darwin (BSD) ist einfacher als Linux. Legen Sie die TCP_KEEPALIVE (Sek.) " auswählen, sowie die SO_KEEPALIVE (bool) option:
Sehen, was die Standard-Intervall ist (wenn Sie gerade Taten, die SO_KEEPALIVE), verwenden Sie:
Werden Sie wahrscheinlich finden Sie unter:
d.h. keepalive ist nur für Steckdosen mit SO_KEEPALIVE gesetzt, und der idle-timeout ist 72000.000 MSEK (2 Stunden). HTH.
sysctl
, nichtnetstat
.Ich glaube, Sie sollten
setsockopt()
sehen Mann SeiteSieht es aus wie die
TCP_KEEPIDLE
,TCP_KEEPINTVL
undTCP_KEEPCNT
sind Linux-spezifisch und werden Sie nicht finden, Ihre entsprechenden Gegenstücke auf OSX.Um die
SO_KEEPALIVE
diesAnderen trick, die ich verwendet vor langer Zeit war, zu versuchen, das senden von 0 (null) Anzahl der bytes, dies zu überprüfen wäre, dass ein socket ist noch am Leben. Entweder als eine sich wiederholende watch dog oder einfach nur, bevor Sie versuchen, eine Nachricht zu senden.
SO_KEEPALIVE
, die ich sehe, ist vorhanden fürsetsockopt()
.