您的位置:首页 > 理论基础 > 计算机网络

开发经验小结(网络编程(2))---套接字选项

2009-05-19 09:42 260 查看
 

 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.常用套接字选项的运用

 

 

      (1).SO_REUSEADDR选项

           设置该选项, 可以确保服务器快速重启时,不会因为监听的端口被占用而失败

 

      (2).SO_KEEPALIVE选项

 

           服务器端设置该选项,可以定时检测客户端的状态。如果客户端因为异常退出, 则套接字被关闭

           检测的默认时间间隔为2小时

 

           如何设置时间间隔?

                   修改 /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;

       (3).SO_LINGER选项

 

                 设置CLOSE套接字的延时,以便处理缓冲区中的数据。一般与SHOUTDOWN一起使用

                 可以减少CLOSE_WAIT状态

   

       (4).SO_CONNECT_TIME选项

                 

                 通过
getsockopt获取该选项的值。可以用来判断这个SOCKET是否已经超时。是防止攻击服务器的好方法

 

       (5).设置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);

                  }  

              }

 

 3.我开发过程中常用的就这些了。希望大家多多补充

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息