LwIP - 打開keepalive功能


在服務器端打開keepalive功能

1、保證LWIP_TCP_KEEPALIVE被定義為1,(這樣TCP_KEEPIDLE、TCP_KEEPINTVL和TCP_KEEPCNT 設置才有效)

2、

int32 keepalive = 1;
int32 keepidle = 1;
int32 keepinterval = 1;
int32 keepcount = 1;
int32 flag = 1;

 

if(setsockopt(server_socket, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepalive, sizeof(keepalive)) < 0)// 打開keepalive功能,需要在執行accept()之前執行
{
printf("set keepalive fail");
}

......accept()

setsockopt(accept_ret, IPPROTO_TCP, TCP_KEEPIDLE, (void*)&keepidle , sizeof(keepidle));
setsockopt(accept_ret, IPPROTO_TCP, TCP_KEEPINTVL, (void *)&keepinterval , sizeof(keepinterval));
setsockopt(accept_ret, IPPROTO_TCP, TCP_KEEPCNT, (void *)&keepcount , sizeof(keepcount));
setsockopt(accept_ret, IPPROTO_TCP, TCP_NODELAY, (void *)&flag , sizeof(flag));

 

在客戶端打開keepalive功能(有些情況下keepalive不能正常工作,建議自建心跳包

1、保證LWIP_TCP_KEEPALIVE被定義過

2、

int32 keepalive = 1;
int32 keepidle = 2;
int32 keepinterval = 2;
int32 keepcount = 2;
int32 flag = 1;

 

if(setsockopt(sta_socket, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepalive, sizeof(keepalive)) < 0)// 打開keepalive功能,需要在執行connect()之前執行
{
printf("set keepalive fail");
}

......connect()

setsockopt(sta_socket, IPPROTO_TCP, TCP_KEEPIDLE, (void*)&keepidle , sizeof(keepidle));
setsockopt(sta_socket, IPPROTO_TCP, TCP_KEEPINTVL, (void *)&keepinterval , sizeof(keepinterval));
setsockopt(sta_socket, IPPROTO_TCP, TCP_KEEPCNT, (void *)&keepcount , sizeof(keepcount));
setsockopt(sta_socket, IPPROTO_TCP, TCP_NODELAY, (void *)&flag , sizeof(flag));

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM