aboutsummaryrefslogtreecommitdiff
path: root/src/core/nginx.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/nginx.c')
-rw-r--r--src/core/nginx.c39
1 files changed, 35 insertions, 4 deletions
diff --git a/src/core/nginx.c b/src/core/nginx.c
index f1671b38d..ab287f283 100644
--- a/src/core/nginx.c
+++ b/src/core/nginx.c
@@ -25,7 +25,7 @@ int ngx_http_init_connection(void *data);
int ngx_max_conn = 512;
struct sockaddr_in ngx_addr = {0, AF_INET, 0, 0, 0};
-
+int ngx_backlog = 0;
ngx_pool_t ngx_pool;
ngx_log_t ngx_log;
@@ -35,10 +35,12 @@ ngx_server_t ngx_server;
int main(int argc, char *const *argv)
{
char addr_text[22];
- ngx_socket_t fd;
+ ngx_socket_t s;
ngx_listen_t ls;
+ int reuseaddr = 1;
#if (WIN32)
WSADATA wsd;
+ unsigned long nb = 1;
#endif
@@ -61,16 +63,45 @@ int main(int argc, char *const *argv)
"WSAStartup failed");
#endif
+ /* for each listening socket */
+ s = socket(AF_INET, SOCK_STREAM, 0);
+ if (s == -1)
+ ngx_log_error(NGX_LOG_EMERG, &(ngx_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, &(ngx_log), ngx_socket_errno,
+ "setsockopt (SO_REUSEADDR) failed");
+
+#if (WIN32)
+ if (ioctlsocket(s, FIONBIO, &nb) == -1)
+ ngx_log_error(NGX_LOG_EMERG, &(ngx_log), ngx_socket_errno,
+ "ioctlsocket (FIONBIO) failed");
+#else
+ if (fcntl(s, F_SETFL, O_NONBLOCK) == -1)
+ ngx_log_error(NGX_LOG_EMERG, &(ngx_log), ngx_socket_errno,
+ "fcntl (O_NONBLOCK) failed");
+#endif
+
ngx_snprintf(ngx_cpystrn(addr_text, inet_ntoa(ngx_addr.sin_addr), 16),
7, ":%d", ntohs(ngx_addr.sin_port));
- fd = ngx_listen((struct sockaddr *) &ngx_addr, -1, &ngx_log, addr_text);
+
+ if (bind(s, (struct sockaddr *) &ngx_addr,
+ sizeof(struct sockaddr_in)) == -1)
+ ngx_log_error(NGX_LOG_EMERG, &(ngx_log), ngx_socket_errno,
+ "bind to %s failed", addr_text);
+
+ if (listen(s, ngx_backlog) == -1)
+ ngx_log_error(NGX_LOG_EMERG, &(ngx_log), ngx_socket_errno,
+ "listen to %s failed", addr_text);
ngx_server.buff_size = 1024;
ngx_server.handler = ngx_http_init_connection;
/* daemon */
- ls.fd = fd;
+ ls.fd = s;
ls.server = &ngx_server;
ls.log = &ngx_log;