<feed xmlns='http://www.w3.org/2005/Atom'>
<title>nginx.git/src/stream/ngx_stream_core_module.c, branch release-1.30.0</title>
<subtitle>nginx</subtitle>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/'/>
<entry>
<title>The "multipath" parameter of the "listen" directive.</title>
<updated>2026-03-18T21:13:51+00:00</updated>
<author>
<name>Sergey Kandaurov</name>
<email>pluknet@nginx.com</email>
</author>
<published>2025-10-16T15:22:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=920dc099c130e0ea23eb36becd157a95901aa5a2'/>
<id>920dc099c130e0ea23eb36becd157a95901aa5a2</id>
<content type='text'>
When configured, it enables Multipath TCP support on a listen socket.
As of now it works on Linux starting with Linux 5.6 and glibc 2.32,
where it is enabled with an IPPROTO_MPTCP socket(2) protocol.

To avoid EADDRINUSE errors in bind() and listen() when transitioning
between sockets with different protocols, SO_REUSEPORT is set on both
sockets.  See f7f1607bf for potential implications.

Based on previous work by Maxime Dourov and Anthony Doeraene.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When configured, it enables Multipath TCP support on a listen socket.
As of now it works on Linux starting with Linux 5.6 and glibc 2.32,
where it is enabled with an IPPROTO_MPTCP socket(2) protocol.

To avoid EADDRINUSE errors in bind() and listen() when transitioning
between sockets with different protocols, SO_REUSEPORT is set on both
sockets.  See f7f1607bf for potential implications.

Based on previous work by Maxime Dourov and Anthony Doeraene.
</pre>
</div>
</content>
</entry>
<entry>
<title>Improved host header validation.</title>
<updated>2025-11-26T15:51:40+00:00</updated>
<author>
<name>Sergey Kandaurov</name>
<email>pluknet@nginx.com</email>
</author>
<published>2025-11-04T12:34:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=511abb19e1e1b127f6d0943ccac346211a490a35'/>
<id>511abb19e1e1b127f6d0943ccac346211a490a35</id>
<content type='text'>
Validation is rewritten to follow RFC 3986 host syntax, based on
ngx_http_parse_request_line().  The following is now rejected:
- the rest of gen-delims "#", "?", "@", "[", "]"
- other unwise delims &lt;"&gt;, "&lt;", "&gt;", "\", "^", "`', "{", "|", "}"
- IP literals with a trailing dot, missing closing bracket, or pct-encoded
- a port subcomponent with invalid values
- characters in upper half
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Validation is rewritten to follow RFC 3986 host syntax, based on
ngx_http_parse_request_line().  The following is now rejected:
- the rest of gen-delims "#", "?", "@", "[", "]"
- other unwise delims &lt;"&gt;, "&lt;", "&gt;", "\", "^", "`', "{", "|", "}"
- IP literals with a trailing dot, missing closing bracket, or pct-encoded
- a port subcomponent with invalid values
- characters in upper half
</pre>
</div>
</content>
</entry>
<entry>
<title>Stream: allow servers with no handler.</title>
<updated>2024-06-27T13:29:56+00:00</updated>
<author>
<name>Roman Arutyunyan</name>
<email>arut@nginx.com</email>
</author>
<published>2024-06-27T13:29:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=788e462c5b81f5f1aee475488e10f01680c530e9'/>
<id>788e462c5b81f5f1aee475488e10f01680c530e9</id>
<content type='text'>
Previously handlers were mandatory.  However they are not always needed.
For example, a server configured with ssl_reject_handshake does not need a
handler.  Such servers required a fake handler to pass the check.  Now handler
absence check is moved to runtime.  If handler is missing, the connection is
closed with 500 code.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Previously handlers were mandatory.  However they are not always needed.
For example, a server configured with ssl_reject_handshake does not need a
handler.  Such servers required a fake handler to pass the check.  Now handler
absence check is moved to runtime.  If handler is missing, the connection is
closed with 500 code.
</pre>
</div>
</content>
</entry>
<entry>
<title>Stream: moved fastopen compatibility check.</title>
<updated>2024-01-18T15:12:38+00:00</updated>
<author>
<name>Roman Arutyunyan</name>
<email>arut@nginx.com</email>
</author>
<published>2024-01-18T15:12:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=45e166b4a4a0e8d0e0f8adeb3438e4745261e8da'/>
<id>45e166b4a4a0e8d0e0f8adeb3438e4745261e8da</id>
<content type='text'>
The move makes the code look similar to the corresponding code in http module.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The move makes the code look similar to the corresponding code in http module.
</pre>
</div>
</content>
</entry>
<entry>
<title>Stream: the "setfib" parameter of the "listen" directive.</title>
<updated>2024-03-22T10:53:19+00:00</updated>
<author>
<name>Sergey Kandaurov</name>
<email>pluknet@nginx.com</email>
</author>
<published>2024-03-22T10:53:19+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=bd190d825ceeacf105a2392d88734f21df35d89a'/>
<id>bd190d825ceeacf105a2392d88734f21df35d89a</id>
<content type='text'>
The FreeBSD SO_SETFIB support.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The FreeBSD SO_SETFIB support.
</pre>
</div>
</content>
</entry>
<entry>
<title>Stream: the "accept_filter" parameter of the "listen" directive.</title>
<updated>2024-03-22T10:53:19+00:00</updated>
<author>
<name>Sergey Kandaurov</name>
<email>pluknet@nginx.com</email>
</author>
<published>2024-03-22T10:53:19+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=04b9bfe55d414bfed8a7aefa3162d81af26532b4'/>
<id>04b9bfe55d414bfed8a7aefa3162d81af26532b4</id>
<content type='text'>
The FreeBSD accept filters support.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The FreeBSD accept filters support.
</pre>
</div>
</content>
</entry>
<entry>
<title>Stream: the "deferred" parameter of the "listen" directive.</title>
<updated>2024-03-22T10:53:19+00:00</updated>
<author>
<name>Sergey Kandaurov</name>
<email>pluknet@nginx.com</email>
</author>
<published>2024-03-22T10:53:19+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=03eba69013eb4f4499a5c09f72338ab95ce00801'/>
<id>03eba69013eb4f4499a5c09f72338ab95ce00801</id>
<content type='text'>
The Linux TCP_DEFER_ACCEPT support.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The Linux TCP_DEFER_ACCEPT support.
</pre>
</div>
</content>
</entry>
<entry>
<title>Overhauled some diagnostic messages akin to 1b05b9bbcebf.</title>
<updated>2024-03-22T10:51:14+00:00</updated>
<author>
<name>Sergey Kandaurov</name>
<email>pluknet@nginx.com</email>
</author>
<published>2024-03-22T10:51:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=ae1948aa40c48a97f2e171acb84eb04bfcbe1307'/>
<id>ae1948aa40c48a97f2e171acb84eb04bfcbe1307</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Stream: virtual servers.</title>
<updated>2023-12-14T17:58:39+00:00</updated>
<author>
<name>Roman Arutyunyan</name>
<email>arut@nginx.com</email>
</author>
<published>2023-12-14T17:58:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=d21675228a0ba8d4331e05c60660228a5d3326de'/>
<id>d21675228a0ba8d4331e05c60660228a5d3326de</id>
<content type='text'>
Server name is taken either from ngx_stream_ssl_module or
ngx_stream_ssl_preread_module.

The change adds "default_server" parameter to the "listen" directive,
as well as the following directives: "server_names_hash_max_size",
"server_names_hash_bucket_size", "server_name" and "ssl_reject_handshake".
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Server name is taken either from ngx_stream_ssl_module or
ngx_stream_ssl_preread_module.

The change adds "default_server" parameter to the "listen" directive,
as well as the following directives: "server_names_hash_max_size",
"server_names_hash_bucket_size", "server_name" and "ssl_reject_handshake".
</pre>
</div>
</content>
</entry>
<entry>
<title>Stream: socket peek in preread phase.</title>
<updated>2023-12-13T14:04:55+00:00</updated>
<author>
<name>Roman Arutyunyan</name>
<email>arut@nginx.com</email>
</author>
<published>2023-12-13T14:04:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sigsegv.uk/nginx.git/commit/?id=72e5d6ac19a93c9fb64678dd33ea185757a6021a'/>
<id>72e5d6ac19a93c9fb64678dd33ea185757a6021a</id>
<content type='text'>
Previously, preread buffer was always read out from socket, which made it
impossible to terminate SSL on the connection without introducing additional
SSL BIOs.  The following patches will rely on this.

Now, when possible, recv(MSG_PEEK) is used instead, which keeps data in socket.
It's called if SSL is not already terminated and if an egde-triggered event
method is used.  For epoll, EPOLLRDHUP support is also required.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Previously, preread buffer was always read out from socket, which made it
impossible to terminate SSL on the connection without introducing additional
SSL BIOs.  The following patches will rely on this.

Now, when possible, recv(MSG_PEEK) is used instead, which keeps data in socket.
It's called if SSL is not already terminated and if an egde-triggered event
method is used.  For epoll, EPOLLRDHUP support is also required.
</pre>
</div>
</content>
</entry>
</feed>
