Mercurial > hg > nginx
diff 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 diff
new file mode 100644 --- /dev/null +++ b/src/core/ngx_listen.c @@ -0,0 +1,44 @@ + +#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; +}