zoukankan      html  css  js  c++  java
  • 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);
    }
  • 相关阅读:
    dmesg
    [转]df命令
    [转]linux /proc/cpuinfo 文件分析
    awk
    sed
    [转]进程间通信
    Bootstrap 树形列表与右键菜单
    Maven国内仓库
    《深入剖析Tomcat》源码
    Spring in Action学习笔记(2)
  • 原文地址:https://www.cnblogs.com/soldierback/p/10744882.html
Copyright © 2011-2022 走看看