加入收藏 | 设为首页 | 会员中心 | 我要投稿 佛山站长网 (https://www.0757zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

UNIX网络编程:常用的套接字选项 - Unix系统

发布时间:2014-12-04 23:23:45 所属栏目:Unix 来源:站长网
导读:1.设置/获取套接字选项 int setsockopt(int socket, int level, int option_name, const void *option_value, socklen_t option_len); int getsockopt(int sock
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选项

查看本栏目更多精彩内容:http://www.bianceng.cn/OS/unix/

通过 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);  
    }     
}

(编辑:佛山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读