summaryrefslogtreecommitdiffhomepage
path: root/src/event/ngx_event_accept.c (follow)
AgeCommit message (Collapse)AuthorFilesLines
2021-12-30Events: fixed balancing between workers with EPOLLEXCLUSIVE.Maxim Dounin1-0/+58
Linux with EPOLLEXCLUSIVE usually notifies only the process which was first to add the listening socket to the epoll instance. As a result most of the connections are handled by the first worker process (ticket #2285). To fix this, we re-add the socket periodically, so other workers will get a chance to accept connections.
2021-04-08Introduced the "keepalive_time" directive.Maxim Dounin1-0/+2
Similar to lingering_time, it limits total connection lifetime before keepalive is switched off. The default is 1 hour, which is close to the total maximum connection lifetime possible with default keepalive_requests and keepalive_timeout.
2018-06-01Events: moved ngx_recvmsg() to new file src/event/ngx_event_udp.c.Roman Arutyunyan1-354/+3
2018-06-01Events: get remote addresses before creating udp connection.Roman Arutyunyan1-71/+82
Previously, ngx_event_recvmsg() got remote socket addresses after creating the connection object. In preparation to handling multiple UDP packets in a single session, this code was moved up.
2018-06-01Events: fixed handling zero-length client address.Roman Arutyunyan1-0/+12
On Linux recvmsg() syscall may return a zero-length client address when receiving a datagram from an unbound unix datagram socket. It is usually assumed that socket address has at least the sa_family member. Zero-length socket address caused buffer over-read in functions which receive socket address, for example ngx_sock_ntop(). Typically the over-read resulted in unexpected socket family followed by session close. Now a fake socket address is allocated instead of a zero-length client address.
2017-10-04Fixed buffer overread with unix sockets after accept().Maxim Dounin1-0/+8
Some OSes (notably macOS, NetBSD, and Solaris) allow unix socket addresses larger than struct sockaddr_un. Moreover, some of them (macOS, Solaris) return socklen of the socket address before it was truncated to fit the buffer provided. As such, on these systems socklen must not be used without additional check that it is within the buffer provided. Appropriate checks added to ngx_event_accept() (after accept()), ngx_event_recvmsg() (after recvmsg()), and ngx_set_inherited_sockets() (after getsockname()). We also obtain socket addresses via getsockname() in ngx_connection_local_sockaddr(), but it does not need any checks as it is only used for INET and INET6 sockets (as there can be no wildcard unix sockets).
2017-05-24Fixed deferred accept with EPOLLRDHUP enabled (ticket #1278).Roman Arutyunyan1-1/+1
Previously, the read event of the accepted connection was marked ready, but not available. This made EPOLLRDHUP-related code (for example, in ngx_unix_recv()) expect more data from the socket, leading to unexpected behavior. For example, if SSL, PROXY protocol and deferred accept were enabled on a listen socket, the client connection was aborted due to unexpected return value of c->recv().
2016-09-15Stream: filters.Roman Arutyunyan1-0/+1
2016-05-23Introduced the ngx_sockaddr_t type.Ruslan Ermilov1-9/+8
It's properly aligned and can hold any supported sockaddr.
2016-04-28Removed unused flag unexpected_eof from ngx_connection_t.Ruslan Ermilov1-2/+0
2016-01-20Stream: UDP proxy.Roman Arutyunyan1-49/+384
2015-05-20The "reuseport" option of the "listen" directive.Maxim Dounin1-6/+19
When configured, an individual listen socket on a given address is created for each worker process. This allows to reduce in-kernel lock contention on configurations with high accept rates, resulting in better performance. As of now it works on Linux and DragonFly BSD. Note that on Linux incoming connection requests are currently tied up to a specific listen socket, and if some sockets are closed, connection requests will be reset, see https://lwn.net/Articles/542629/. With nginx, this may happen if the number of worker processes is reduced. There is no such problem on DragonFly BSD. Based on previous work by Sepherosa Ziehau and Yingqi Lu.
2015-04-23Removed the obsolete rtsig module.Ruslan Ermilov1-31/+10
2015-04-22Removed the obsolete aio module.Ruslan Ermilov1-5/+4
2014-09-01Events: removed broken thread support from posted events.Valentin Bartenev1-7/+0
It's mostly dead code. And the idea of thread support for this task has been deprecated.
2014-05-22Core: output client port number when logging accept event.Ruslan Ermilov1-3/+11
2014-03-06Fixed format specifier in logging of "c->number".Sergey Kandaurov1-1/+1
2013-12-09Core: keep the length of the local sockaddr.Ruslan Ermilov1-0/+1
2013-09-04Win32: MinGW GCC compatibility.Maxim Dounin1-1/+1
Several warnings silenced, notably (ngx_socket_t) -1 is now checked on socket operations instead of -1, as ngx_socket_t is unsigned on win32 and gcc complains on comparison. With this patch, it's now possible to compile nginx using mingw gcc, with options we normally compile on win32.
2013-09-04Win32: Borland C compatibility fixes.Maxim Dounin1-1/+1
Several false positive warnings silenced, notably W8012 "Comparing signed and unsigned" (due to u_short values promoted to int), and W8072 "Suspicious pointer arithmetic" (due to large type values added to pointers). With this patch, it's now again possible to compile nginx using bcc32, with options we normally compile on win32 minus ipv6 and ssl.
2013-07-11Core: extended ngx_sock_ntop() with socklen parameter.Vladimir Homutov1-1/+2
On Linux, sockaddr length is required to process unix socket addresses properly due to unnamed sockets (which don't have sun_path set at all) and abstract namespace sockets.
2012-05-11Accept moderation in case of EMFILE/ENFILE.Maxim Dounin1-6/+44
In case of EMFILE/ENFILE returned from accept() we disable accept events, and (in case of no accept mutex used) arm timer to re-enable them later. With accept mutex we just drop it, and rely on normal accept mutex handling to re-enable accept events once it's acquired again. As we now handle errors in question, logging level was changed to "crit" (instead of "alert" used for unknown errors). Note: the code might call ngx_enable_accept_events() multiple times if there are many listen sockets. The ngx_enable_accept_events() function was modified to check if connection is already active (via c->read->active) and skip it then, thus making multiple calls safe.
2012-04-29debug_connection: added the IPv6 and UNIX-domain socket support.Ruslan Ermilov1-7/+46
2012-01-18Copyright updated.Maxim Konovalov1-0/+1
2010-12-02fix building by msvc8 introduced by the previous commitIgor Sysoev1-3/+5
2010-12-02fallback to accept() if accept4() is not implemented,Igor Sysoev1-2/+21
the issue has been introduced in r3787
2010-11-25Linux accept4() supportIgor Sysoev1-0/+4
2009-11-01delete unused field c->local_socklenIgor Sysoev1-1/+0
2009-10-26http listen unix domain socketsIgor Sysoev1-0/+11
2009-06-18ignore ngx_atomic_fetch_add() resultIgor Sysoev1-4/+4
this fixes building at least by gcc 4.2.1 on Mac OS X 10.6
2009-04-19add variadic macros support for msvc8Igor Sysoev1-2/+2
2009-02-21a prelimiary IPv6 support, HTTP listenIgor Sysoev1-8/+6
2008-09-19dynamic accept thresholdIgor Sysoev1-1/+1
2008-08-21ngx_sock_ntop() takes family from sockaddr, remove duplicate fieldIgor Sysoev1-2/+1
2008-06-17*) back out r2040Igor Sysoev1-1/+1
*) refactor ngx_palloc() *) introduce ngx_pnalloc() *) additional pool blocks have smaller header
2006-09-26Solaris 10 event ports supportIgor Sysoev1-1/+10
2006-09-25rename variableIgor Sysoev1-6/+6
2006-07-11nginx-0.3.54-RELEASE importrelease-0.3.54Igor Sysoev1-6/+6
*) Feature: nginx now logs the subrequest information to the error log. *) Feature: the "proxy_next_upstream", "fastcgi_next_upstream", and "memcached_next_upstream" directives support the "off" parameter. *) Feature: the "debug_connection" directive supports the CIDR address form. *) Bugfix: if a response of proxied server or FastCGI server was converted from UTF-8 or back, then it may be transferred incomplete. *) Bugfix: the $upstream_response_time variable had the time of the first request to a backend only. *) Bugfix: nginx could not be built on amd64 platform; the bug had appeared in 0.3.53.
2006-04-26nginx-0.3.42-RELEASE importrelease-0.3.42Igor Sysoev1-3/+0
*) Feature: the "bind" option of the "listen" directive in IMAP/POP3 proxy. *) Bugfix: if the same capture in the "rewrite" directive was used more then once. *) Bugfix: the $sent_http_content_type, $sent_http_content_length, $sent_http_last_modified, $sent_http_connection, $sent_http_keep_alive, and $sent_http_transfer_encoding variables were not written to access log. *) Bugfix: the $sent_http_cache_control returned value of the single "Cache-Control" response header line.
2006-04-17nginx-0.3.39-RELEASE importrelease-0.3.39Igor Sysoev1-1/+4
*) Feature: the "uninitialized_variable_warn" directive; the logging level of the "uninitialized variable" message was lowered from "alert" to "warn". *) Feature: the "override_charset" directive. *) Change: now if the unknown variable is used in the "echo" and "if expr='$name'" SSI-commands, then the "unknown variable" message is not logged. *) Bugfix: the active connection counter increased on the exceeding of the connection limit specified by the "worker_connections" directive; the bug had appeared in 0.2.0. *) Bugfix: the limit rate might not work on some condition; the bug had appeared in 0.3.38.
2006-02-22nginx-0.3.30-RELEASE importrelease-0.3.30Igor Sysoev1-1/+1
*) Change: the ECONNABORTED error log level was changed to "error" from "crit". *) Bugfix: the ngx_http_perl_module could not be build without the ngx_http_ssi_filter_module. *) Bugfix: nginx could not be built on i386 platform, if the PIC was used; the bug had appeared in 0.3.27.
2006-02-20nginx-0.3.29-RELEASE importrelease-0.3.29Igor Sysoev1-2/+1
*) Feature: now nginx uses less memory, if PHP in FastCGI mode sends many warnings before the response. *) Bugfix: the "Transfer-Encoding: chunked" header line was issued in the 204 responses for the HTTP/1.1 requests. *) Bugfix: nginx returned the 502 response, if the complete response header lines were transferred in a separate FastCGI records. *) Bugfix: if the proxied URI was specified in the "post_action" directive, then it ran only after a successful completion of a request.
2006-02-08nginx-0.3.27-RELEASE importrelease-0.3.27Igor Sysoev1-4/+3
*) Change: the "variables_hash_max_size" and "variables_hash_bucket_size" directives. *) Feature: the $body_bytes_sent variable can be used not only in the "log_format" directive. *) Feature: the $ssl_protocol and $ssl_cipher variables. *) Feature: the cache line size detection for widespread CPUs at start time. *) Feature: now the "accept_mutex" directive is supported using fcntl(2) on platforms different from i386, amd64, sparc64, and ppc. *) Feature: the "lock_file" directive and the --with-lock-path=PATH autoconfiguration directive. *) Bugfix: if the HTTPS protocol was used in the "proxy_pass" directive then the requests with the body was not transferred.
2005-11-26nginx-0.3.12-RELEASE importrelease-0.3.12Igor Sysoev1-9/+1
*) Security: if nginx was built with the ngx_http_realip_module and the "satisfy_any on" directive was used, then access and authorization directives did not work. The ngx_http_realip_module was not built and is not built by default. *) Change: the "$time_gmt" variable name was changed to "$time_local". *) Change: the "proxy_header_buffer_size" and "fastcgi_header_buffer_size" directives was renamed to the "proxy_buffer_size" and "fastcgi_buffer_size" directives. *) Feature: the ngx_http_memcached_module. *) Feature: the "proxy_buffering" directive. *) Bugfix: the changes in accept mutex handling when the "rtsig" method was used; the bug had appeared in 0.3.0. *) Bugfix: if the client sent the "Transfer-Encoding: chunked" header line, then nginx returns the 411 error. *) Bugfix: if the "auth_basic" directive was inherited from the http level, then the realm in the "WWW-Authenticate" header line was without the "Basic realm" text. *) Bugfix: if the "combined" format was explicitly specified in the "access_log" directive, then the empty lines was written to the log; the bug had appeared in 0.3.8. *) Bugfix: nginx did not run on the sparc platform under any OS except Solaris. *) Bugfix: now it is not necessary to place space between the quoted string and closing bracket in the "if" directive.
2005-11-15nginx-0.3.10-RELEASE importrelease-0.3.10Igor Sysoev1-1/+2
*) Change: the "valid_referers" directive and the "$invalid_referer" variable were moved to the new ngx_http_referer_module from the ngx_http_rewrite_module. *) Change: the "$apache_bytes_sent" variable name was changed to "$body_bytes_sent". *) Feature: the "$sent_http_..." variables. *) Feature: the "if" directive supports the "=" and "!=" operations. *) Feature: the "proxy_pass" directive supports the HTTPS protocol. *) Feature: the "proxy_set_body" directive. *) Feature: the "post_action" directive. *) Feature: the ngx_http_empty_gif_module. *) Feature: the "worker_cpu_affinity" directive for Linux. *) Bugfix: the "rewrite" directive did not unescape URI part in redirect, now it is unescaped except the %00-%25 and %7F-%FF characters. *) Bugfix: nginx could not be built by the icc 9.0 compiler. *) Bugfix: if the SSI was enabled for zero size static file, then the chunked response was encoded incorrectly.
2005-11-09nginx-0.3.8-RELEASE importrelease-0.3.8Igor Sysoev1-8/+22
*) Security: nginx now checks URI got from a backend in "X-Accel-Redirect" header line or in SSI file for the "/../" paths and zeroes. *) Change: nginx now does not treat the empty user name in the "Authorization" header line as valid one. *) Feature: the "ssl_session_timeout" directives of the ngx_http_ssl_module and ngx_imap_ssl_module. *) Feature: the "auth_http_header" directive of the ngx_imap_auth_http_module. *) Feature: the "add_header" directive. *) Feature: the ngx_http_realip_module. *) Feature: the new variables to use in the "log_format" directive: $bytes_sent, $apache_bytes_sent, $status, $time_gmt, $uri, $request_time, $request_length, $upstream_status, $upstream_response_time, $gzip_ratio, $uid_got, $uid_set, $connection, $pipe, and $msec. The parameters in the "%name" form will be canceled soon. *) Change: now the false variable values in the "if" directive are the empty string "" and string starting with "0". *) Bugfix: while using proxied or FastCGI-server nginx may leave connections and temporary files with client requests in open state. *) Bugfix: the worker processes did not flush the buffered logs on graceful exit. *) Bugfix: if the request URI was changes by the "rewrite" directive and the request was proxied in location given by regular expression, then the incorrect request was transferred to backend; the bug had appeared in 0.2.6. *) Bugfix: the "expires" directive did not remove the previous "Expires" header. *) Bugfix: nginx may stop to accept requests if the "rtsig" method and several worker processes were used. *) Bugfix: the "\"" and "\'" escape symbols were incorrectly handled in SSI commands. *) Bugfix: if the response was ended just after the SSI command and gzipping was used, then the response did not transferred complete or did not transferred at all.
2005-10-12nginx-0.3.2-RELEASE importrelease-0.3.2Igor Sysoev1-32/+9
*) Feature: the Sun Studio 10 C compiler support. *) Feature: the "proxy_upstream_max_fails", "proxy_upstream_fail_timeout", "fastcgi_upstream_max_fails", and "fastcgi_upstream_fail_timeout" directives.
2005-09-23nginx-0.2.0-RELEASE importrelease-0.2.0Igor Sysoev1-195/+116
*) The pid-file names used during online upgrade was changed and now is not required a manual rename operation. The old master process adds the ".oldbin" suffix to its pid-file and executes a new binary file. The new master process creates usual pid-file without the ".newbin" suffix. If the master process exits, then old master process renames back its pid-file with the ".oldbin" suffix to the pid-file without suffix. *) Change: the "worker_connections" directive, new name of the "connections" directive; now the directive specifies maximum number of connections, but not maximum socket descriptor number. *) Feature: SSL supports the session cache inside one worker process. *) Feature: the "satisfy_any" directive. *) Change: the ngx_http_access_module and ngx_http_auth_basic_module do not run for subrequests. *) Feature: the "worker_rlimit_nofile" and "worker_rlimit_sigpending" directives. *) Bugfix: if all backend using in load-balancing failed after one error, then nginx did not try do connect to them during 60 seconds. *) Bugfix: in IMAP/POP3 command argument parsing. Thanks to Rob Mueller. *) Bugfix: errors while using SSL in IMAP/POP3 proxy. *) Bugfix: errors while using SSI and gzipping. *) Bugfix: the "Expires" and "Cache-Control" header lines were omitted from the 304 responses. Thanks to Alexandr Kukushkin.
2005-09-06nginx-0.1.44-RELEASE importrelease-0.1.44Igor Sysoev1-0/+1
*) Feature: the IMAP/POP3 proxy supports SSL. *) Feature: the "proxy_timeout" directive of the ngx_imap_proxy_module. *) Feature: the "userid_mark" directive. *) Feature: the $remote_user variable value is determined independently of authorization use.
2005-06-15nginx-0.1.36-RELEASE importrelease-0.1.36Igor Sysoev1-0/+3
*) Change: if the request header has duplicate the "Host", "Connection", "Content-Length", or "Authorization" lines, then nginx now returns the 400 error. *) Change: the "post_accept_timeout" directive was canceled. *) Feature: the "default", "af=", "bl=", "deferred", and "bind" parameters of the "listen" directive. *) Feature: the FreeBSD accept filters support. *) Feature: the Linux TCP_DEFER_ACCEPT support. *) Bugfix: the ngx_http_autoindex_module did not support the file names in UTF-8. *) Bugfix: the new log file can be rotated by the -USR1 signal only if the reconfiguration by the -HUP signal was made twice.