TCP/IP: установить параметр сокета для поддержания активности после установления соединения

Можно ли установить параметр SO_KEEPALIVE сокета (интервал поддержания активности TCP и значение поддержания активности TCP) после некоторого гипотетического рукопожатия на уровне приложения? Или его нужно устанавливать перед вызовом accept?

Я обеспокоен функциональной совместимостью между Linux, Windows и стеком eCos lwIP, поэтому информация об обеих платформах приветствуется.


person pmf    schedule 27.07.2015    source источник
comment
Вы можете установить его в любое время. Конечно, нет сокета, чтобы установить его до accept(),, если только вы не можете установить его на сокете прослушивания и позволить ему наследоваться всеми принятыми сокетами.   -  person user207421    schedule 27.07.2015
comment
Вы можете опубликовать это как ответ, чтобы я мог принять его.   -  person pmf    schedule 27.07.2015


Ответы (1)


Как сказал EJP, вы можете установить его в любое время. справочная страница говорит:

setockopt() управляет параметрами сокета, на который ссылается файловый дескриптор sockfd.

Вы можете установить или отключить SO_KEEPALIVE следующим образом.

int iOption = 1; // Turn on keep-alive, 0 = disables, 1 = enables
if (setsockopt(socketHandle, SOL_SOCKET, SO_KEEPALIVE, (const char *) &iOption,  sizeof(int)) == SOCKET_ERROR)
    {
           cerr << "Set keepalive: Keepalive option failed" << endl;
    }

Вы также можете прочитать этот руководство для получения более подробной информации.

person Ortomala Lokni    schedule 16.08.2015