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;
    }
  • 相关阅读:
    NLPIR大数据语义系统文本数据分析挖掘平台
    NLPIR:中文语义挖掘是自然语言处理的关键
    NLPIR-JZSearch智能搜索深层挖掘大数据资源
    NLPIR智能Protege知识图谱实现多场景应用
    DotNet加密方式解析--散列加密
    SSO单点登录PHP简单版
    xss框架基础框架实现
    Kafka Offset Storage
    C#如何使用ES
    模拟Vue之数据驱动
  • 原文地址:https://www.cnblogs.com/unixshell/p/3844922.html
Copyright © 2011-2022 走看看