zoukankan      html  css  js  c++  java
  • 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小时。

         如何设置时间间隔?

    修改 /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将等到所有套接字里排队的消息成功发送或到达延迟时间后才会返回。否则,调用将立即返回。


    • 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);
                      }   
                  }



  • 相关阅读:
    Urlrewrite 配置信息写在另外的文件
    maven项目动态替换配置中的值
    搭建一个java博客
    那个不嫌弃你穷的姑娘,如果有一天真的离开了你,那只是因为,你把她弄哭了。
    常规工作流模型
    浅谈https(创建、传输、断开)
    日志相关杂
    主键生成
    自动化部署脚本(windows上传到linux)
    简述IO
  • 原文地址:https://www.cnblogs.com/hehehaha/p/6332592.html
Copyright © 2011-2022 走看看