zoukankan      html  css  js  c++  java
  • network

    #include <sys/types.h>      
    #include <sys/socket.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <netinet/tcp.h>
    #include "server_network.h"
    
    int sock_setnonblock(sock_t s)
    {
        int flags = 0;
        flags = fcntl(s, F_GETFL);
        if (flags < 0)
            return flags;
        
        flags |= O_NONBLOCK;
        if (fcntl(s, F_SETFL, flags) < 0)
            return -1;
    
        return 0;
    }
    
    
    int sock_unsetnonblock(sock_t s)
    {
        int flags = 0;
        flags = fcntl(s, F_GETFL);
        if (flags < 0)
            return flags;
    
        flags &= ~O_NONBLOCK;
        if (fcntl(s, F_SETFL, flags) < 0)
            return -1;
    
        return 0;
    }
    
    
    int sock_setnodelay(sock_t s)
    {
        int flag =1;
        return setsockopt(s, SOL_TCP, TCP_NODELAY, (char *)&flag, sizeof(flag));
    }
    
    
    int sock_set_recv_timeout(sock_t s, int sec)
    {
        struct timeval timeout;
    
        timeout.tv_sec = sec;
        timeout.tv_usec = 0;
    
        return setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout,
                      sizeof(timeout));    
    }
    
    int sock_set_snd_timeout(sock_t s, int sec)
    {
        struct timeval timeout;
    
        timeout.tv_sec = sec;
        timeout.tv_usec = 0;
    
        return setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout,
                      sizeof(timeout));
    }
    
    
    int sock_set_keepalive(sock_t s, int timeout)
    {
        int val = 1;
        //设置成keepalive模式
        if (setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, &val, sizeof(val)) < 0) {
            return -1;
        }
        //设置探测时间
        val = timeout;
        if (setsockopt(s, SOL_TCP, TCP_KEEPIDLE, &val, sizeof(val)) < 0) {
            return -1;
        }
        //设置探测间隔时间,1s
        val = 1;
        if (setsockopt(s, SOL_TCP, TCP_KEEPINTVL, &val, sizeof(val)) < 0) {
            return -1;
        }
        //设置探测次数,3次
        val = 3;
        if (setsockopt(s, SOL_TCP, TCP_KEEPCNT, &val, sizeof(val)) < 0) {
            return -1;
        }
        return 0;
    }
  • 相关阅读:
    vue全局启用 emulateJSON 选项
    vue全局配置数据接口的根域名
    CSS实现按钮YES-NO按钮+Jquery获取按钮状态。
    Redis命令
    在js中获取 input checkbox里选中的多个值
    Python中常见字符串去除空格的方法总结
    e.target.value和this的区别
    用脚本来运行scrapy crawl ...
    生成器的两种方式
    python中ord()函数,chr()函数,unichr()函数
  • 原文地址:https://www.cnblogs.com/unixshell/p/3844922.html
Copyright © 2011-2022 走看看