UNIX网络编程——常用的套接字选项

1.设置/获取套接字选项服务器

int setsockopt(int socket, int level, int option_name, const void *option_value, socklen_t option_len);
int getsockopt(int socket, int level, int option_name, void *restrict option_value, socklen_t *restrict option_len);

 2.经常使用套接字选项的运用

  • SO_REUSEADDR选项
     设置该选项, 能够确保服务器快速重启时,不会由于监听的端口被占用而失败。
  • SO_KEEPALIVE选项

     服务器端设置该选项,能够定时检测客户端的状态。若是客户端由于异常退出, 则套接字被关闭,检测的默认时间间隔为2小时。socket

     如何设置时间间隔?
tcp

修改 /ect/sysctl.conf
     添加以下3行:
net.ipv4.tcp_keepalive_intvl=20//失败探测间隔时间20秒
net.ipv4.tcp_keepalive_probes=3//失败探测次数
net.ipv4.tcp_keepalive_time=60//间隔时间
     而后重启内核:sysctl -p;

  • SO_LINGER选项

     若是选择此选项,close或 shutdown将等到全部套接字里排队的消息成功发送或到达延迟时间后才会返回。不然,调用将当即返回。spa


  • SO_CONNECT_TIME选项
     经过 getsockopt获取该选项的值。能够用来判断这个SOCKET是否已经超时。是防止攻击服务器的好方法。
  • 设置SOCKET为非阻塞

              static void setnonblocking(int sock)
              {
                    int opts;

                    opts=fcntl(sock,F_GETFL);
                    if(opts<0)
                    {
                         exit(1);
                    }

                   opts = opts|O_NONBLOCK;
     
                   if(fcntl(sock,F_SETFL,opts)<0)
                   {
                           exit(1);
                  }   
              }
相关文章
相关标签/搜索