Сокет продолжает работать не работает на Linux - PullRequest
2 голосов
/ 30 марта 2012

У нас есть приложение на Java, использующее сокеты с включенным поддержкой TCP.

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

Наши тесты показывают, что функция поддержки активности работает в Windows правильнохост, но не на хосте Linux (Ubuntu Lucid).

Копая, мы обнаружили, что числовая константа SO_KEEPALIVE, используемая в Java, похоже, не соответствует константе, используемой в 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

Мы думаем, что это объясняет, почему в Linux не работает программа live alive.Кто-нибудь может предложить другую причину или решение?

Cheers Marc

1 Ответ

3 голосов
/ 16 апреля 2012

(я знаю, что это больше похоже на комментарий, но у меня недостаточно репутации, чтобы добавить его. Пожалуйста, не голосуйте за меня, пожалуйста.)

Я бы посоветовал вам использовать "netstat -anpo" в linux, чтобы проверить, действительно ли включен таймер keepalive для вашего соединения. Если он включен, в столбце «Таймер» будет отображаться «keepalive». В противном случае он будет выключен.

...