view src/core/ngx_listen.c @ 0:4eff17414a43

nginx-0.0.1-2002-08-06-20:39:45 import The first code that uses "ngx_" prefix, the previous one used "gx_" prefix. At that point the code is not yet usable. The first draft ideas are dated back to 23.10.2001.
author Igor Sysoev <igor@sysoev.ru>
date Tue, 06 Aug 2002 16:39:45 +0000
parents
children
line wrap: on
line source


#include <ngx_config.h>
#include <ngx_types.h>
#include <ngx_errno.h>
#include <ngx_log.h>
#include <ngx_listen.h>

ngx_socket_t ngx_listen(struct sockaddr *addr, int backlog,
                        ngx_log_t *log, char *addr_text)
{
    ngx_socket_t   s;
    int            reuseaddr = 1;
#if (WIN32)
    unsigned long  nb = 1;
#endif

    if ((s = socket(AF_INET, SOCK_STREAM, 0)) == -1)
        ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno, "socket failed");

    if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR,
                   (const void *) &reuseaddr, sizeof(int)) == -1)
        ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
                     "ngx_listen: setsockopt (SO_REUSEADDR) failed");

#if (WIN32)
    if (ioctlsocket(s, FIONBIO, &nb) == -1)
        ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
                     "ngx_listen: ioctlsocket (FIONBIO) failed");
#else
    if (fcntl(s, F_SETFL, O_NONBLOCK) == -1)
        ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
                     "ngx_listen: fcntl (O_NONBLOCK) failed");
#endif

    if (bind(s, (struct sockaddr *) addr, sizeof(struct sockaddr_in)) == -1)
        ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
                     "ngx_listen: bind to %s failed", addr_text);

    if (listen(s, backlog) == -1)
        ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
                     "ngx_listen: listen to %s failed", addr_text);

    return s;
}