• tcp_listen函数


    #include    <netdb.h>
    #include    <unistd.h>
    #include    <stddef.h>
    #include    <strings.h>
    #include    <sys/socket.h>
    
    #define     LISTENQ     1024
    
    int 
    tcp_listen(const char *host, const char *serv, socklen_t *addrlenp)
    {
        int                listenfd, n;
        const int        on = 1;
        struct addrinfo    hints, *res, *ressave;
    
        bzero(&hints, sizeof(struct addrinfo));
        hints.ai_flags = AI_PASSIVE;
        hints.ai_family = AF_UNSPEC;
        hints.ai_socktype = SOCK_STREAM;
    
        if ( (n = getaddrinfo(host, serv, &hints, &res)) != 0) {
            err_quit (
                "tcp_listen error for %s, %s: %s",
                host, serv, gai_strerror(n)
            );
        }
        ressave = res;
    
        do {
            listenfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
            if (listenfd < 0) {
                continue;        /* error, try next one */
            }
    
            setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
            if (bind(listenfd, res->ai_addr, res->ai_addrlen) == 0) {
                break;            /* success */
            }
    
            close(listenfd);    /* bind error, close and try next one */
        } while ( (res = res->ai_next) != NULL);
    
        if (res == NULL) {        /* errno from final socket() or bind() */
            err_sys("tcp_listen error for %s, %s", host, serv);
        }
    
        listen(listenfd, LISTENQ);
    
        if (addrlenp) {
            *addrlenp = res->ai_addrlen;    /* return size of protocol address */
        }
    
        freeaddrinfo(ressave);
    
        return(listenfd);
    }
  • 相关阅读:
    scrapy 中间件
    索引
    理解平均负载
    jquery1
    网络编程
    模块
    进程
    图书管理系统用ajax删除书籍
    mysql
    jquery
  • 原文地址:https://www.cnblogs.com/soldierback/p/10744882.html
Copyright © 2020-2023  润新知