12345678910111213141516171819202122232425 |
- #include "socket_comm.h"
- void
- sp_nonblocking(int fd) {
- int flag = fcntl(fd, F_GETFL, 0);
- if (-1 == flag) {
- return;
- }
- fcntl(fd, F_SETFL, flag | O_NONBLOCK);
- }
- void
- set_keep_alive(int fd) {
- //set keep alive
- int keepAlive = 1; // 开启keepalive属性
- int keepIdle = 60; // 如该连接在60秒内没有任何数据往来,则进行探测
- int keepInterval = 5; // 探测时发包的时间间隔为5 秒
- int keepCount = 3; // 探测尝试的次数.如果第1次探测包就收到响应了,则后2次的不再发.
- setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepAlive, sizeof(keepAlive));
- setsockopt(fd, SOL_TCP, TCP_KEEPIDLE, (void*)&keepIdle, sizeof(keepIdle));
- setsockopt(fd, SOL_TCP, TCP_KEEPINTVL, (void *)&keepInterval, sizeof(keepInterval));
- setsockopt(fd, SOL_TCP, TCP_KEEPCNT, (void *)&keepCount, sizeof(keepCount));
- }
|