簡體   English   中英

套接字保持活動狀態在Linux上不起作用

[英]Socket keep alive not working on Linux

我們有一個Java應用程序,該應用程序使用啟用了TCP保持活動狀態的套接字

Socket.setKeepAlive(true) http://docs.oracle.com/javase/6/docs/api/java/net/Socket.html#setKeepAlive (boolean)

我們的測試表明,“保持活動”功能在Windows主機上正常運行,但在Linux主機(Ubuntu Lucid)上卻無法正常運行。

深入研究發現,Java中使用的SO_KEEPALIVE數字常量似乎與Linux中使用的常量不匹配。

在Java中:jdk / src / share / classes / java / net / SocketOptions.java:

public final static int SO_KEEPALIVE = 0x0008;

在Solaris中:include / sys / socket.h

#define    SO_KEEPALIVE    0x0008        /* keep connections alive */

在Linux Sparc,MIPS,Alpha和PARISC中:/usr/src//linux-headers-2.6.32-19/arch/sparc/include/asm/socket.h:

#define SO_KEEPALIVE    0x0008

在其他Linux(x86和amd64)中:/usr/include/asm-generic/socket.h:

\#define SO_KEEPALIVE    9

我們認為這可以解釋為什么keep live無法在Linux上運行。 誰能提出其他原因或解決方案?

干杯馬克

(我知道這更像是評論,但是我沒有足夠的聲譽來添加評論。請不要對我投反對票。)

我建議您可以在Linux上使用“ netstat -anpo”來檢查keepalive Timer是否真的為您的連接打開了。 如果啟用,它將在“計時器”列中顯示“ keepalive”。 否則將為“關閉”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM