我們已經使用套接字與TCP Java應用程序永葆啓用插座永葆沒有工作在Linux上
socket的(真) 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目錄/股/班/ JAVA /網/ SocketOptions.java:
public final static int SO_KEEPALIVE = 0x0008;
在Solaris中:包括/ 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 /包括/ ASM /插座。 H:
#define SO_KEEPALIVE 0x0008
在其他Linux(x86和AMD64):/usr/include/asm-generic/socket.h:
\#define SO_KEEPALIVE 9
我們認爲,這可以解釋爲什麼永葆不工作在Linux上。任何人都可以提出其他原因或解決方案?
乾杯 馬克
SocketOption值無關緊要,它被映射到本地代碼中特定於平臺的值。 – jtahlborn 2012-03-30 13:51:36
你嘗試過什麼不同的主機/客戶端配置?保持活動的超時時間因平臺而異。這可能是因爲linux主機的超時時間較長,並且客戶端計算機正在終止連接,因爲它認爲連接已經死亡。 – Dunes 2012-03-30 14:17:23