Mercurial > hg > nginx-vendor-0-6
diff src/core/ngx_connection.c @ 10:46833bd150cb NGINX_0_1_5
nginx 0.1.5
*) Bugfix: on Solaris and Linux there may be too many "recvmsg()
returned not enough data" alerts.
*) Bugfix: there were the "writev() failed (22: Invalid argument)"
errors on Solaris in proxy mode without sendfile. On other platforms
that do not support sendfile at all the process got caught in an
endless loop.
*) Bugfix: segmentation fault on Solaris in proxy mode and using
sendfile.
*) Bugfix: segmentation fault on Solaris.
*) Bugfix: on-line upgrade did not work on Linux.
*) Bugfix: the ngx_http_autoindex_module module did not escape the
spaces, the quotes, and the percent signs in the directory listing.
*) Change: the decrease of the copy operations.
*) Feature: the userid_p3p directive.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Thu, 11 Nov 2004 00:00:00 +0300 |
parents | cc9f381affaa |
children | 74b1868dd3cd |
line wrap: on
line diff
--- a/src/core/ngx_connection.c +++ b/src/core/ngx_connection.c @@ -30,28 +30,27 @@ ngx_listening_t *ngx_listening_inet_stre return NULL; } -#if (HAVE_SIN_LEN) - addr_in->sin_len = sizeof(struct sockaddr_in); -#endif addr_in->sin_family = AF_INET; addr_in->sin_addr.s_addr = addr; addr_in->sin_port = htons(port); - if (!(ls->addr_text.data = ngx_palloc(cf->pool, INET_ADDRSTRLEN + 6))) { + + ls->addr_text.data = ngx_palloc(cf->pool, + INET_ADDRSTRLEN - 1 + sizeof(":65535") - 1); + if (ls->addr_text.data == NULL) { return NULL; } len = ngx_inet_ntop(AF_INET, &addr, ls->addr_text.data, INET_ADDRSTRLEN); - ls->addr_text.len = ngx_snprintf((char *) ls->addr_text.data + len, - 6, ":%d", port); + + ls->addr_text.len = ngx_sprintf(ls->addr_text.data + len, ":%d", port) + - ls->addr_text.data; + ls->fd = (ngx_socket_t) -1; ls->family = AF_INET; ls->type = SOCK_STREAM; ls->protocol = IPPROTO_IP; -#if (WIN32) - ls->flags = WSA_FLAG_OVERLAPPED; -#endif ls->sockaddr = (struct sockaddr *) addr_in; ls->socklen = sizeof(struct sockaddr_in); ls->addr = offsetof(struct sockaddr_in, sin_addr); @@ -63,6 +62,7 @@ ngx_listening_t *ngx_listening_inet_stre ngx_int_t ngx_set_inherited_sockets(ngx_cycle_t *cycle) { + size_t len; ngx_uint_t i; ngx_listening_t *ls; struct sockaddr_in *addr_in; @@ -95,20 +95,26 @@ ngx_int_t ngx_set_inherited_sockets(ngx_ ls[i].ignore = 1; continue; } + ls[i].addr_text_max_len = INET_ADDRSTRLEN; - ls[i].addr_text.data = ngx_palloc(cycle->pool, ls[i].addr_text_max_len); + + ls[i].addr_text.data = ngx_palloc(cycle->pool, INET_ADDRSTRLEN - 1 + + sizeof(":65535") - 1); if (ls[i].addr_text.data == NULL) { return NGX_ERROR; } ls[i].family = addr_in->sin_family; - ls[i].addr_text.len = ngx_sock_ntop(ls[i].family, ls[i].sockaddr, - ls[i].addr_text.data, - ls[i].addr_text_max_len); - if (ls[i].addr_text.len == 0) { + len = ngx_sock_ntop(ls[i].family, ls[i].sockaddr, + ls[i].addr_text.data, INET_ADDRSTRLEN); + if (len == 0) { return NGX_ERROR; } + + ls[i].addr_text.len = ngx_sprintf(ls[i].addr_text.data + len, ":%d", + ntohs(addr_in->sin_port)) + - ls[i].addr_text.data; } return NGX_OK; @@ -157,16 +163,15 @@ ngx_int_t ngx_open_listening_sockets(ngx continue; } - s = ngx_socket(ls[i].family, ls[i].type, ls[i].protocol, - ls[i].flags); + s = ngx_socket(ls[i].family, ls[i].type, ls[i].protocol); if (s == -1) { ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno, - ngx_socket_n " %s failed", ls[i].addr_text.data); + ngx_socket_n " %V failed", &ls[i].addr_text); return NGX_ERROR; } -#if (WIN32) +#if (NGX_WIN32) /* * Winsock assignes a socket number divisible by 4 * so to find a connection we divide a socket number by 4. @@ -182,8 +187,8 @@ ngx_int_t ngx_open_listening_sockets(ngx if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (const void *) &reuseaddr, sizeof(int)) == -1) { ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno, - "setsockopt(SO_REUSEADDR) %s failed", - ls[i].addr_text.data); + "setsockopt(SO_REUSEADDR) %V failed", + &ls[i].addr_text); return NGX_ERROR; } @@ -192,8 +197,8 @@ ngx_int_t ngx_open_listening_sockets(ngx if (!(ngx_event_flags & NGX_USE_AIO_EVENT)) { if (ngx_nonblocking(s) == -1) { ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno, - ngx_nonblocking_n " %s failed", - ls[i].addr_text.data); + ngx_nonblocking_n " %V failed", + &ls[i].addr_text); return NGX_ERROR; } } @@ -202,8 +207,8 @@ ngx_int_t ngx_open_listening_sockets(ngx if (ls[i].nonblocking) { if (ngx_nonblocking(s) == -1) { ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno, - ngx_nonblocking_n " %s failed", - ls[i].addr_text.data); + ngx_nonblocking_n " %V failed", + &ls[i].addr_text); return NGX_ERROR; } } @@ -212,15 +217,15 @@ ngx_int_t ngx_open_listening_sockets(ngx if (bind(s, ls[i].sockaddr, ls[i].socklen) == -1) { err = ngx_socket_errno; ngx_log_error(NGX_LOG_EMERG, log, err, - "bind() to %s failed", ls[i].addr_text.data); + "bind() to %V failed", &ls[i].addr_text); if (err != NGX_EADDRINUSE) return NGX_ERROR; if (ngx_close_socket(s) == -1) ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno, - ngx_close_socket_n " %s failed", - ls[i].addr_text.data); + ngx_close_socket_n " %V failed", + &ls[i].addr_text); failed = 1; continue; @@ -228,7 +233,7 @@ ngx_int_t ngx_open_listening_sockets(ngx if (listen(s, ls[i].backlog) == -1) { ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno, - "listen() to %s failed", ls[i].addr_text.data); + "listen() to %V failed", &ls[i].addr_text); return NGX_ERROR; } @@ -273,7 +278,7 @@ void ngx_close_listening_sockets(ngx_cyc for (i = 0; i < cycle->listening.nelts; i++) { fd = ls[i].fd; -#if (WIN32) +#if (NGX_WIN32) /* * Winsock assignes a socket number divisible by 4 * so to find a connection we divide a socket number by 4. @@ -296,8 +301,7 @@ void ngx_close_listening_sockets(ngx_cyc if (ngx_close_socket(ls[i].fd) == -1) { ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_socket_errno, - ngx_close_socket_n " %s failed", - ls[i].addr_text.data); + ngx_close_socket_n " %V failed", &ls[i].addr_text); } cycle->connections[fd].fd = (ngx_socket_t) -1; @@ -408,7 +412,7 @@ ngx_int_t ngx_connection_error(ngx_conne } if (err == NGX_ECONNRESET -#if !(WIN32) +#if !(NGX_WIN32) || err == NGX_EPIPE #endif || err == NGX_ENOTCONN