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;
+}