<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <link>http://hg.omfa.de/prosody-hg/</link>
    <language>en-us</language>

    <title>prosody-hg: net/server_epoll.lua history</title>
    <description>net/server_epoll.lua revision history</description>
    <item>
    <title>Merge 13.0-&gt;trunk</title>
    <link>http://hg.omfa.de/prosody-hg/log/9728c3fabeef/net/server_epoll.lua</link>
    <description><![CDATA[Merge 13.0-&gt;trunk]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Wed, 29 Apr 2026 17:12:59 +0100</pubDate>
</item>
<item>
    <title>Merge 0.12-&gt;13.0</title>
    <link>http://hg.omfa.de/prosody-hg/log/e3ddbf7f2d3f/net/server_epoll.lua</link>
    <description><![CDATA[Merge 0.12-&gt;13.0]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Wed, 29 Apr 2026 17:12:11 +0100</pubDate>
</item>
<item>
    <title>net.server_epoll: Clean up timers after disconnection</title>
    <link>http://hg.omfa.de/prosody-hg/log/57d8b5c5a4e7/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Clean up timers after disconnection]]></description>
    <author>&#87;&#97;&#113;&#97;&#115;&#32;&#72;&#117;&#115;&#115;&#97;&#105;&#110;&#32;&#60;&#119;&#97;&#113;&#97;&#115;&#50;&#48;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Thu, 16 Apr 2026 19:00:22 +0100</pubDate>
</item>
<item>
    <title>Merge 13.0-&gt;trunk</title>
    <link>http://hg.omfa.de/prosody-hg/log/c1469296190d/net/server_epoll.lua</link>
    <description><![CDATA[Merge 13.0-&gt;trunk]]></description>
    <author>&#77;&#97;&#116;&#116;&#104;&#101;&#119;&#32;&#87;&#105;&#108;&#100;&#32;&#60;&#109;&#119;&#105;&#108;&#100;&#49;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Fri, 17 Apr 2026 14:35:32 +0100</pubDate>
</item>
<item>
    <title>net.server_epoll: Clean up timers after disconnection</title>
    <link>http://hg.omfa.de/prosody-hg/log/e27d94d8f505/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Clean up timers after disconnection]]></description>
    <author>&#87;&#97;&#113;&#97;&#115;&#32;&#72;&#117;&#115;&#115;&#97;&#105;&#110;&#32;&#60;&#119;&#97;&#113;&#97;&#115;&#50;&#48;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#62;</author>
    <pubDate>Thu, 16 Apr 2026 19:00:22 +0100</pubDate>
</item>
<item>
    <title>net.server_epoll: Downgrade buffer related log message to noise</title>
    <link>http://hg.omfa.de/prosody-hg/log/107a3d9c147b/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Downgrade buffer related log message to noise<br/>
<br/>
This one is very noisy, being printed at least once per write, and is<br/>
presumably mostly of interest when debugging or tuning server_epoll.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Wed, 15 Oct 2025 02:12:51 +0200</pubDate>
</item>
<item>
    <title>net.server_epoll: Restore idle checks after pause (e.g. rate limits)</title>
    <link>http://hg.omfa.de/prosody-hg/log/334fb7adb0bc/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Restore idle checks after pause (e.g. rate limits)<br/>
<br/>
It seems that under some conditions the read timeout is not recreated.<br/>
This led to various dead connection accumulating.<br/>
<br/>
Code review noticed this case, easily triggered by enabling rate limits.<br/>
Uncertain if there may be others.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sun, 24 Aug 2025 18:15:09 +0200</pubDate>
</item>
<item>
    <title>net.server_epoll: Use correct connection timeout when initiating Direct TLS</title>
    <link>http://hg.omfa.de/prosody-hg/log/2cfb6625b6d2/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Use correct connection timeout when initiating Direct TLS<br/>
<br/>
Otherwise it takes a lot longer to time out Direct TLS connections than<br/>
TCP / STARTTLS connections.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Wed, 02 Apr 2025 15:54:31 +0200</pubDate>
</item>
<item>
    <title>net.server_epoll: Improve readability of DANE noise</title>
    <link>http://hg.omfa.de/prosody-hg/log/0bd65ed1fd10/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Improve readability of DANE noise<br/>
<br/>
Serialized Lua is not the most readable form of TLSA records.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Thu, 27 Feb 2025 21:36:43 +0100</pubDate>
</item>
<item>
    <title>net.server_epoll: Call :shutdown() on TLS sockets when supported</title>
    <link>http://hg.omfa.de/prosody-hg/log/a08065207ef0/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Call :shutdown() on TLS sockets when supported<br/>
<br/>
Comment from Matthew:<br/>
<br/>
This fixes a potential issue where the Prosody process gets blocked on sockets<br/>
waiting for them to close. Unlike non-TLS sockets, closing a TLS socket sends<br/>
layer 7 data, and this can cause problems for sockets which are in the process<br/>
of being cleaned up.<br/>
<br/>
This depends on LuaSec changes which are not yet upstream.<br/>
<br/>
From Martijn's original email:<br/>
<br/>
So first my analysis of luasec. in ssl.c the socket is put into blocking<br/>
mode right before calling SSL_shutdown() inside meth_destroy(). My best<br/>
guess to why this is is because meth_destroy is linked to the __close<br/>
and __gc methods, which can't exactly be called multiple times and<br/>
luasec does want to make sure that a tls session is shutdown as clean<br/>
as possible.<br/>
I can't say I disagree with this reasoning and don't want to change this<br/>
behaviour. My solution to this without changing the current behaviour is<br/>
to introduce a shutdown() method. I am aware that this overlaps in a<br/>
conflicting way with tcp's shutdown method, but it stays close to the<br/>
OpenSSL name. This method calls SSL_shutdown() in the current<br/>
(non)blocking mode of the underlying socket and returns a boolean<br/>
whether or not the shutdown is completed (matching SSL_shutdown()'s 0<br/>
or 1 return values), and returns the familiar ssl_ioerror() strings on<br/>
error with a false for completion. This error can then be used to<br/>
determine if we have wantread/wantwrite to finalize things. Once<br/>
meth_shutdown() has been called once a shutdown flag will be set, which<br/>
indicates to meth_destroy() that the SSL_shutdown() has been handled<br/>
by the application and it shouldn't be needed to set the socket to<br/>
blocking mode. I've left the SSL_shutdown() call in the<br/>
LSEC_STATE_CONNECTED to prevent TOCTOU if the application reaches a<br/>
timeout for the shutdown code, which might allow SSL_shutdown() to<br/>
clean up anyway at the last possible moment.<br/>
Another thing I've changed to luasec is the call to socket_setblocking()<br/>
right before calling close(2) in socket_destroy() in usocket.c.<br/>
According to the latest POSIX[0]:<br/>
  Note that the requirement for close() on a socket to block for up to<br/>
  the current linger interval is not conditional on the O_NONBLOCK<br/>
  setting.<br/>
Which I read to mean that removing O_NONBLOCK on the socket before close<br/>
doesn't impact the behaviour and only causes noise in system call<br/>
tracers. I didn't touch the windows bits of this, since I don't do<br/>
windows.<br/>
<br/>
For the prosody side of things I've made the TLS shutdown bits resemble<br/>
interface:onwritable(), and put it under a combined guard of self._tls<br/>
and self.conn.shutdown. The self._tls bit is there to prevent getting<br/>
stuck on this condition, and self.conn.shutdown is there to prevent the<br/>
code being called by instances where the patched luasec isn't deployed.<br/>
The destroy() method can be called from various places and is read by<br/>
me as the &quot;we give up&quot; error path. To accommodate for these unexpected<br/>
entrypoints I've added a single call to self.conn:shutdown() to prevent<br/>
the socket being put into blocking mode. I have no expectations that<br/>
there is any other use here. Same as previous, the self.conn.shutdown<br/>
check is there to make sure it's not called on unpatched luasec<br/>
deployments and self._tls is there to make sure we don't call shutdown()<br/>
on tcp sockets.<br/>
I wouldn't recommend logging of the conn:shutdown() error inside<br/>
close(), since a lot of clients simply close the connection before<br/>
SSL_shutdown() is done.]]></description>
    <author>&#77;&#97;&#114;&#116;&#105;&#106;&#110;&#32;&#118;&#97;&#110;&#32;&#68;&#117;&#114;&#101;&#110;&#32;&#60;&#109;&#97;&#114;&#116;&#105;&#106;&#110;&#64;&#111;&#112;&#101;&#110;&#98;&#115;&#100;&#46;&#111;&#114;&#103;&#62;</author>
    <pubDate>Thu, 06 Feb 2025 15:04:38 +0000</pubDate>
</item>
<item>
    <title>net.server_epoll: Don't try to flush buffer on closed connections</title>
    <link>http://hg.omfa.de/prosody-hg/log/ca041359c045/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Don't try to flush buffer on closed connections<br/>
<br/>
Attempt to fix a bug where connections are somehow closed twice, leading<br/>
to bad things happening elsewhere.<br/>
<br/>
With LuaSec, closed connections are generally already too closed to<br/>
write anything to anyway since it does not support unidirectional<br/>
shutdown.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Tue, 19 Nov 2024 00:41:02 +0100</pubDate>
</item>
<item>
    <title>net.server_epoll: Revert opportunistic_writes tweak</title>
    <link>http://hg.omfa.de/prosody-hg/log/9b9b224aa3f8/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Revert opportunistic_writes tweak<br/>
<br/>
Added in f0b2c026e542 and not sure why]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Tue, 19 Nov 2024 00:31:21 +0100</pubDate>
</item>
<item>
    <title>net.server_epoll: Make running out of buffer space a fatal error</title>
    <link>http://hg.omfa.de/prosody-hg/log/850e4ade7a01/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Make running out of buffer space a fatal error<br/>
<br/>
Prevent Bad Things from happening when the buffer gets full.<br/>
This of course opens up the possibility of intentionally killing<br/>
connections by sending much stuff, which need to be mitigated with rate<br/>
limits elsewhere.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sat, 09 Nov 2024 15:42:31 +0100</pubDate>
</item>
<item>
    <title>net.server_epoll: Improve efficiency of sending much buffered data</title>
    <link>http://hg.omfa.de/prosody-hg/log/f0b2c026e542/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Improve efficiency of sending much buffered data<br/>
<br/>
Problem: The string slice operations when a lot of data gets buffered<br/>
ends up being expensive and memory-consuming. We have util.dbuffer for<br/>
precisely this kind of thing.<br/>
<br/>
I want to keep the behavior of writebuffer being upgraded from nil to a<br/>
string to full buffer since the last step involves three table<br/>
allocations, where the previous buffer method only used one. Avoiding<br/>
those allocations for simple writes like white space keep alive feels<br/>
like it would keep memory churn down.<br/>
<br/>
This work was started in 2020]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sat, 09 Nov 2024 00:37:15 +0100</pubDate>
</item>
<item>
    <title>net.server_epoll: Add support for systemd socket activation</title>
    <link>http://hg.omfa.de/prosody-hg/log/6f840763fc73/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Add support for systemd socket activation<br/>
<br/>
Allows creating listening sockets and accepting client connections<br/>
before Prosody starts.<br/>
This is unlike normal Prosody dynamic resource management, where ports<br/>
may added and removed at any time, and the ports defined by the config.<br/>
<br/>
Weird things happen if these are closed (e.g. due to reload) so here we<br/>
prevent closing and ensure sockets are reused when opened again.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Tue, 14 May 2024 17:07:47 +0200</pubDate>
</item>
<item>
    <title>net.server_epoll: Log creation of signalfd handles at noise level</title>
    <link>http://hg.omfa.de/prosody-hg/log/f36e1e1b84fe/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Log creation of signalfd handles at noise level<br/>
<br/>
To aid in tracking down signalfd-related problems]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Fri, 01 Mar 2024 19:20:45 +0100</pubDate>
</item>
<item>
    <title>net.server_epoll: Log failure to hook signals</title>
    <link>http://hg.omfa.de/prosody-hg/log/5c9df28a57bb/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Log failure to hook signals<br/>
<br/>
To make any such failures noticeable]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Wed, 28 Feb 2024 22:24:09 +0100</pubDate>
</item>
<item>
    <title>util.signal: Wrap signalfd in an userdatum for gc handling etc</title>
    <link>http://hg.omfa.de/prosody-hg/log/6d96b6eeee5a/net/server_epoll.lua</link>
    <description><![CDATA[util.signal: Wrap signalfd in an userdatum for gc handling etc]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sat, 24 Feb 2024 01:00:44 +0100</pubDate>
</item>
<item>
    <title>net.server_epoll: Support hooking signals via signalfd</title>
    <link>http://hg.omfa.de/prosody-hg/log/b27de3d2bad6/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Support hooking signals via signalfd<br/>
<br/>
Handling signal events the same way as all other events makes sense and<br/>
seems safer than the signal handling just jumping around in C and<br/>
messing with Lua states.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sat, 24 Feb 2024 00:20:35 +0100</pubDate>
</item>
<item>
    <title>net.server_epoll: Prevent traceback when checking TLS after connection gone</title>
    <link>http://hg.omfa.de/prosody-hg/log/3c80124452ed/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Prevent traceback when checking TLS after connection gone<br/>
<br/>
Unclear why this would be done, but an error is not great.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sun, 21 Jan 2024 22:59:50 +0100</pubDate>
</item>
<item>
    <title>net.server_epoll: Avoid call to update socket watch flags when nothing changed</title>
    <link>http://hg.omfa.de/prosody-hg/log/f91761822420/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Avoid call to update socket watch flags when nothing changed<br/>
<br/>
Should skip a syscall for each write when using epoll.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Tue, 21 Nov 2023 22:06:28 +0100</pubDate>
</item>
<item>
    <title>net: Prefix module imports with prosody namespace</title>
    <link>http://hg.omfa.de/prosody-hg/log/ba409c67353b/net/server_epoll.lua</link>
    <description><![CDATA[net: Prefix module imports with prosody namespace]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Fri, 17 Mar 2023 16:23:12 +0100</pubDate>
</item>
<item>
    <title>net.server_epoll: Remove delay on last main loop iteration when quitting</title>
    <link>http://hg.omfa.de/prosody-hg/log/f33887f925e1/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Remove delay on last main loop iteration when quitting<br/>
<br/>
Main difference is that timers are not checked unconditionally before<br/>
each poll, only when running out of previous poll results (hidden by<br/>
util.poll).  This removes a final poll at shutdown that usually delays<br/>
the 'not quitting' condition check by one second.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Fri, 06 Jan 2023 04:38:39 +0100</pubDate>
</item>
<item>
    <title>net.server_epoll: Factor out single main loop step into its own function</title>
    <link>http://hg.omfa.de/prosody-hg/log/0605d4f03e25/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Factor out single main loop step into its own function<br/>
<br/>
This isn't actually used in Prosody, so no value in complicating the<br/>
real main loop because of it]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Fri, 06 Jan 2023 02:31:21 +0100</pubDate>
</item>
<item>
    <title>mod_saslauth: Implement RFC 9266 'tls-exporter' channel binding (#1760)</title>
    <link>http://hg.omfa.de/prosody-hg/log/29685403be32/net/server_epoll.lua</link>
    <description><![CDATA[mod_saslauth: Implement RFC 9266 'tls-exporter' channel binding (#1760)<br/>
<br/>
Brings back SCRAM-SHA-*-PLUS from its hiatus brought on by the earlier<br/>
channel binding method being undefined for TLS 1.3, and the increasing<br/>
deployment of TLS 1.3.<br/>
<br/>
See 1bfd238e05ad and #1542<br/>
<br/>
Requires future version of LuaSec, once support for this key material<br/>
export method is merged.<br/>
<br/>
See https://github.com/brunoos/luasec/pull/187]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Wed, 01 Jun 2022 15:06:59 +0200</pubDate>
</item>
<item>
    <title>net.server: Fix multiple return values</title>
    <link>http://hg.omfa.de/prosody-hg/log/5ec9d6913162/net/server_epoll.lua</link>
    <description><![CDATA[net.server: Fix multiple return values<br/>
<br/>
return foo and foo() crops multiple return values to a single one, so<br/>
any second return values etc were last, mostly error details.<br/>
<br/>
Introduced in 7e9ebdc75ce4]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Fri, 03 Jun 2022 17:51:42 +0200</pubDate>
</item>
<item>
    <title>net.server_epoll: Add option to defer accept() until data available</title>
    <link>http://hg.omfa.de/prosody-hg/log/76c1725f4467/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Add option to defer accept() until data available<br/>
<br/>
This is a Linux(?) socket option that delays the accept signal until<br/>
there is data available to read. E.g. with HTTP this might mean that a<br/>
whole request can be handled without going back trough another turn of<br/>
the main loop, and an initial client &lt;stream&gt; can be responded to.<br/>
<br/>
This may have effects on latency and resource use, as the server does<br/>
not need to allocate resources until really needed.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sun, 15 May 2022 22:41:17 +0200</pubDate>
</item>
<item>
    <title>net.server_epoll: Wrap LuaSocket object earlier to reuse option setting method</title>
    <link>http://hg.omfa.de/prosody-hg/log/194469fb46f9/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Wrap LuaSocket object earlier to reuse option setting method<br/>
<br/>
Since it provides some protection and error handling in the form of<br/>
logging.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Fri, 16 Jul 2021 00:57:42 +0200</pubDate>
</item>
<item>
    <title>net.server_epoll: Move call to refresh remote IP address out of wrapper</title>
    <link>http://hg.omfa.de/prosody-hg/log/6efbcd52db21/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Move call to refresh remote IP address out of wrapper<br/>
<br/>
Reduces the side effects of wrapsocket()]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Fri, 16 Jul 2021 00:56:45 +0200</pubDate>
</item>
<item>
    <title>net.server_epoll: Add support for TCP Fast Open</title>
    <link>http://hg.omfa.de/prosody-hg/log/b7f07585ec4c/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Add support for TCP Fast Open<br/>
<br/>
Requires a patch to LuaSocket adding this socket option,<br/>
https://github.com/lunarmodules/luasocket/pull/378<br/>
<br/>
sysctl tweaks<br/>
net.ipv4.tcp_fastopen=3<br/>
net.ipv4.tcp_fastopen_blackhole_timeout_sec = 0<br/>
net.ipv4.tcp_fastopen_key=$(&lt;/proc/sys/kernel/random/uuid)<br/>
<br/>
Disabled by default since it an advanced performance tweak unlikely to<br/>
be needed by most servers.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Thu, 08 Jul 2021 12:29:50 +0200</pubDate>
</item>
<item>
    <title>net: refactor sslconfig to not depend on LuaSec</title>
    <link>http://hg.omfa.de/prosody-hg/log/2ee27587fec7/net/server_epoll.lua</link>
    <description><![CDATA[net: refactor sslconfig to not depend on LuaSec<br/>
<br/>
This now requires that the network backend exposes a tls_builder<br/>
function, which essentially wraps the former util.sslconfig.new()<br/>
function, passing a factory to create the eventual SSL context.<br/>
<br/>
That allows a net.server backend to pick whatever it likes as SSL<br/>
context factory, as long as it understands the config table passed by<br/>
the SSL config builder. Heck, a backend could even mock and replace the<br/>
entire SSL config builder API.]]></description>
    <author>&#74;&#111;&#110;&#97;&#115;&#32;&#83;&#99;&#104;&#228;&#102;&#101;&#114;&#32;&#60;&#106;&#111;&#110;&#97;&#115;&#64;&#119;&#105;&#101;&#108;&#105;&#99;&#107;&#105;&#46;&#110;&#97;&#109;&#101;&#62;</author>
    <pubDate>Sat, 02 Apr 2022 11:15:33 +0200</pubDate>
</item>
<item>
    <title>net: isolate LuaSec-specifics</title>
    <link>http://hg.omfa.de/prosody-hg/log/7e9ebdc75ce4/net/server_epoll.lua</link>
    <description><![CDATA[net: isolate LuaSec-specifics<br/>
<br/>
For this, various accessor functions are now provided directly on the<br/>
sockets, which reach down into the LuaSec implementation to obtain the<br/>
information.<br/>
<br/>
While this may seem of little gain at first, it hides the implementation<br/>
detail of the LuaSec+LuaSocket combination that the actual socket and<br/>
the TLS layer are separate objects.<br/>
<br/>
The net gain here is that an alternative implementation does not have to<br/>
emulate that specific implementation detail and &quot;only&quot; has to expose<br/>
LuaSec-compatible data structures on the new functions.]]></description>
    <author>&#74;&#111;&#110;&#97;&#115;&#32;&#83;&#99;&#104;&#228;&#102;&#101;&#114;&#32;&#60;&#106;&#111;&#110;&#97;&#115;&#64;&#119;&#105;&#101;&#108;&#105;&#99;&#107;&#105;&#46;&#110;&#97;&#109;&#101;&#62;</author>
    <pubDate>Wed, 27 Apr 2022 17:44:14 +0200</pubDate>
</item>
<item>
    <title>net.server_epoll: Disable verbose mode by default</title>
    <link>http://hg.omfa.de/prosody-hg/log/cba0b93320b7/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Disable verbose mode by default]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sat, 12 Feb 2022 18:47:22 +0100</pubDate>
</item>
<item>
    <title>util.id: Adjust entropy levels, with rationales</title>
    <link>http://hg.omfa.de/prosody-hg/log/b5b799a2a10c/net/server_epoll.lua</link>
    <description><![CDATA[util.id: Adjust entropy levels, with rationales<br/>
<br/>
Modules using ids for logging should not need the now pretty large<br/>
medium one.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Thu, 02 Dec 2021 01:14:55 +0100</pubDate>
</item>
<item>
    <title>Merge 0.11-&gt;trunk</title>
    <link>http://hg.omfa.de/prosody-hg/log/7a48ccb084dd/net/server_epoll.lua</link>
    <description><![CDATA[Merge 0.11-&gt;trunk]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Mon, 20 Dec 2021 23:12:08 +0100</pubDate>
</item>
<item>
    <title>net.server_epoll: Process all queued events from epoll before timers</title>
    <link>http://hg.omfa.de/prosody-hg/log/59557bc3c4b8/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Process all queued events from epoll before timers<br/>
<br/>
Should call timers less frequently when many sockets are waiting for<br/>
processing. May help under heavy load.<br/>
<br/>
Requested by Ge0rG<br/>
<br/>
Backport of 2bcd84123eba requested by Roi]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Thu, 21 Oct 2021 15:59:16 +0200</pubDate>
</item>
<item>
    <title>net.server_epoll: Ensure calls to :write() return something</title>
    <link>http://hg.omfa.de/prosody-hg/log/9dc36fdbdba1/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Ensure calls to :write() return something<br/>
<br/>
With opportunistic writes enabled, writes can return what :onwritable()<br/>
returns, thus :onwritable() should return something sensible at each<br/>
spot.<br/>
<br/>
Should prevent whatever caused<br/>
&gt; Error writing to connection: (nil)<br/>
Tho this was probably harmless]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Mon, 06 Dec 2021 10:59:14 +0100</pubDate>
</item>
<item>
    <title>net.server_epoll: Prevent loop attempting to send last data after close</title>
    <link>http://hg.omfa.de/prosody-hg/log/520ce76440ad/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Prevent loop attempting to send last data after close<br/>
<br/>
If the connection is closed by the peer, any buffered data is given a<br/>
last chance to be sent (see f27b9319e0da). If the connection is Really<br/>
closed, no attempt to write will occur, instead epoll will raise the<br/>
error flag and :onreadable() will be invoked again, where it will try to<br/>
:close() again for the same reason, thus looping until the connection<br/>
somehow gets destroyed.<br/>
<br/>
By clearing the _connected flag, the second time it passes :onreadable()<br/>
it should go directly to :destroy(), breaking the loop.<br/>
<br/>
Thanks Link Mauve for reporting]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Tue, 30 Nov 2021 18:19:40 +0100</pubDate>
</item>
<item>
    <title>net.server_epoll: Fix streaming downloads (thanks Menel)</title>
    <link>http://hg.omfa.de/prosody-hg/log/28f5c8061dad/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Fix streaming downloads (thanks Menel)<br/>
<br/>
ff4e34c448a4 broke the way net.http.server streams downloads from disk<br/>
because it made writes from the ondrain callback no longer reset the<br/>
want-write flag, causing the download to halt.<br/>
<br/>
Writes from the predrain handler still must not trigger anything but<br/>
additions to the buffer, since it is about to do all the socket writing<br/>
already.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Fri, 19 Nov 2021 15:45:01 +0100</pubDate>
</item>
<item>
    <title>net.server_epoll: Try harder to avoid reentrant opportunistic writes</title>
    <link>http://hg.omfa.de/prosody-hg/log/ff4e34c448a4/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Try harder to avoid reentrant opportunistic writes<br/>
<br/>
Opportunistic writes sure do complicate things. This is especially<br/>
intended to avoid opportunistic_writes from within the onpredrain<br/>
callback.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Thu, 18 Nov 2021 16:21:43 +0100</pubDate>
</item>
<item>
    <title>net.server_epoll: Process all queued events from epoll before timers</title>
    <link>http://hg.omfa.de/prosody-hg/log/2bcd84123eba/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Process all queued events from epoll before timers<br/>
<br/>
Should call timers less frequently when many sockets are waiting for<br/>
processing. May help under heavy load.<br/>
<br/>
Requested by Ge0rG]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Thu, 21 Oct 2021 15:59:16 +0200</pubDate>
</item>
<item>
    <title>net.server_epoll: Prevent starttls on direct TLS connections</title>
    <link>http://hg.omfa.de/prosody-hg/log/19b50ce9ef5a/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Prevent starttls on direct TLS connections<br/>
<br/>
This is not a pretty way to signal this... but it is the current API<br/>
<br/>
interface:inittls() is a new code path which did not go past the point<br/>
in interface:starttls() where it set starttls to false, leading mod_tls<br/>
to offer starttls on direct TLS connections<br/>
<br/>
Thanks Martin for discovering.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Tue, 05 Oct 2021 19:56:36 +0200</pubDate>
</item>
<item>
    <title>net.server_epoll: Separate handling of &quot;closed&quot; from other errors</title>
    <link>http://hg.omfa.de/prosody-hg/log/f27b9319e0da/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Separate handling of &quot;closed&quot; from other errors<br/>
<br/>
The intent is to ensure 'ondisconnect' only gets called once, while<br/>
giving buffered outgoing data a last chance to be delivered via the<br/>
:close() path in case the connection was only shutdown in one direction.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Wed, 22 Sep 2021 13:29:47 +0200</pubDate>
</item>
<item>
    <title>net.server_epoll: Skip attempt to flush write buffer when not connected</title>
    <link>http://hg.omfa.de/prosody-hg/log/790bffbb9047/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Skip attempt to flush write buffer when not connected<br/>
<br/>
Before 22825cb5dcd8 connection attempts that failed (e.g. connection<br/>
refused) would be immediately destroyed.  After, it would schedule<br/>
another write cycle and then report 'ondisconnect' again when failing.<br/>
<br/>
Thanks Martin for reporting]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Wed, 22 Sep 2021 11:27:55 +0200</pubDate>
</item>
<item>
    <title>Merge 0.11-&gt;trunk</title>
    <link>http://hg.omfa.de/prosody-hg/log/42e98179c034/net/server_epoll.lua</link>
    <description><![CDATA[Merge 0.11-&gt;trunk]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Mon, 20 Sep 2021 15:51:43 +0200</pubDate>
</item>
<item>
    <title>net.server_epoll: Add a hard deadline on shutdown to extra-fix #1670</title>
    <link>http://hg.omfa.de/prosody-hg/log/ae43166fe931/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Add a hard deadline on shutdown to extra-fix #1670<br/>
<br/>
Should ensure shutdown even if sockets somehow take a very long to get closed.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Mon, 20 Sep 2021 14:38:08 +0200</pubDate>
</item>
<item>
    <title>net.server_epoll: Close sockets added after shutdown signal (fixes #1670)</title>
    <link>http://hg.omfa.de/prosody-hg/log/fe0cdbad19c3/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Close sockets added after shutdown signal (fixes #1670)<br/>
<br/>
This should ensure that sockets get closed even if they are added after<br/>
the quit signal. Otherwise they may keep the server alive.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Mon, 20 Sep 2021 14:42:18 +0200</pubDate>
</item>
<item>
    <title>net.server_epoll: Fix indentation messed up in last merge</title>
    <link>http://hg.omfa.de/prosody-hg/log/2327e03d1f8d/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Fix indentation messed up in last merge<br/>
<br/>
Seems to have happened in 6427e2642976, probably because of Meld]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Fri, 17 Sep 2021 12:42:04 +0200</pubDate>
</item>
<item>
    <title>net.server_epoll: Don't immediately destroy upon getting closed on read</title>
    <link>http://hg.omfa.de/prosody-hg/log/22825cb5dcd8/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Don't immediately destroy upon getting closed on read<br/>
<br/>
Instead try to write any remaining buffered data. If the write attempt<br/>
also fails with &quot;closed&quot; then there's nothing we can do and the socket<br/>
is gone.<br/>
<br/>
This reverts what appears to be a mistakenly included part of c8aa66595072<br/>
<br/>
Thanks jonas’ for noticing]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Wed, 15 Sep 2021 18:39:37 +0200</pubDate>
</item>
<item>
    <title>net.server_epoll: Try to make port number related methods sane</title>
    <link>http://hg.omfa.de/prosody-hg/log/9006ff4838ff/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Try to make port number related methods sane<br/>
<br/>
Previously it was unclear whether &quot;client port&quot; was the port that the<br/>
client connected to, or from. I hereby declare that the client port is<br/>
the source port and the server port is the destination port.<br/>
<br/>
Incoming and outgoing connections can be distinguished by looking at<br/>
the_server reference, which only incoming connections have.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sun, 12 Sep 2021 15:47:06 +0200</pubDate>
</item>
<item>
    <title>net.server_epoll: Prevent removed timers from being readded</title>
    <link>http://hg.omfa.de/prosody-hg/log/dbf378dcf27b/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Prevent removed timers from being readded<br/>
<br/>
In a case like this the timer would not be readded:<br/>
<br/>
addtimer(1, function(t, id)<br/>
	stop(id)<br/>
	return 1<br/>
end);]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Tue, 31 Aug 2021 13:34:08 +0200</pubDate>
</item>
<item>
    <title>Merge 0.11-&gt;trunk</title>
    <link>http://hg.omfa.de/prosody-hg/log/6427e2642976/net/server_epoll.lua</link>
    <description><![CDATA[Merge 0.11-&gt;trunk]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Tue, 31 Aug 2021 13:03:44 +0200</pubDate>
</item>
<item>
    <title>net.server_epoll: Fix to preserve ids of readded timers</title>
    <link>http://hg.omfa.de/prosody-hg/log/a8c9a78c6a4b/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Fix to preserve ids of readded timers<br/>
<br/>
Likely affected rescheduling but have no reports of this.<br/>
<br/>
After readding a timer, it would have been issued a new id. Rescheduling<br/>
would use the previous id, thus not working.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Tue, 31 Aug 2021 12:58:38 +0200</pubDate>
</item>
<item>
    <title>net.server_epoll: Split, attempt to clarify dirty noise message</title>
    <link>http://hg.omfa.de/prosody-hg/log/856dada099fa/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Split, attempt to clarify dirty noise message<br/>
<br/>
Only relevant because a &quot;dirty&quot; connection (with incoming data in<br/>
LuaSocket's buffer) does not count as &quot;readable&quot; according to epoll, so<br/>
special care needs to be taken to keep on processing it.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Mon, 16 Aug 2021 20:15:38 +0200</pubDate>
</item>
<item>
    <title>net.server: Add a predrain callaback just before writes</title>
    <link>http://hg.omfa.de/prosody-hg/log/dcf38ac6a38c/net/server_epoll.lua</link>
    <description><![CDATA[net.server: Add a predrain callaback just before writes<br/>
<br/>
Allows sneaking in things in the write buffer just before it's sent to<br/>
the network stack. For example ack requests, compression flushes or<br/>
other things that make sense to send after stanzas or other things.<br/>
This ensures any additional trailing data sent is included in the same<br/>
write, and possibly the same TCP packet. Other methods used such as<br/>
timers or nextTick might not have the same effect as it depends on<br/>
scheduling.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Mon, 16 Aug 2021 12:34:52 +0200</pubDate>
</item>
<item>
    <title>net.server_epoll: Improve efficiency of opportunistic writes</title>
    <link>http://hg.omfa.de/prosody-hg/log/3f1450ec37f4/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Improve efficiency of opportunistic writes<br/>
<br/>
Should prevent further opportunistic write attempts after the kernel<br/>
buffers are full and stops accepting writes.<br/>
<br/>
When combined with `keep_buffers = false` it should stop it from<br/>
repeatedly recreating the buffer table and concatenating it back into a<br/>
string when there's a lot to write.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sat, 14 Aug 2021 13:07:29 +0200</pubDate>
</item>
<item>
    <title>net.server_epoll: Fix traceback-causing typo</title>
    <link>http://hg.omfa.de/prosody-hg/log/e57c5d9c722c/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Fix traceback-causing typo<br/>
<br/>
Caused &quot;attempt to index a string value (local 'data')&quot;, but only if<br/>
keep_buffers is set to false, which is not the default.<br/>
<br/>
Introduced in 917eca7be82b]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sun, 18 Jul 2021 08:53:37 +0200</pubDate>
</item>
<item>
    <title>net.server_epoll: Ensure timeouts match epoll flags</title>
    <link>http://hg.omfa.de/prosody-hg/log/c206430e2643/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Ensure timeouts match epoll flags<br/>
<br/>
Read and write timeouts should usually match whether we want to read or<br/>
write.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sat, 17 Jul 2021 14:54:48 +0200</pubDate>
</item>
<item>
    <title>net.server_epoll: Skip reset of read timeout when not reading</title>
    <link>http://hg.omfa.de/prosody-hg/log/a3572205c5bf/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Skip reset of read timeout when not reading<br/>
<br/>
Should avoid rare but needless timer interactions]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sat, 17 Jul 2021 14:51:50 +0200</pubDate>
</item>
<item>
    <title>net.server_epoll: Reduce timer churn during TLS handshake</title>
    <link>http://hg.omfa.de/prosody-hg/log/79d30de13fdb/net/server_epoll.lua</link>
    <description><![CDATA[net.server_epoll: Reduce timer churn during TLS handshake<br/>
<br/>
Instead of removing and readding the timer, keep it and adjust it<br/>
instead. Should reduce garbage production a bit.]]></description>
    <author>&#75;&#105;&#109;&#32;&#65;&#108;&#118;&#101;&#102;&#117;&#114;&#32;&#60;&#122;&#97;&#115;&#104;&#64;&#122;&#97;&#115;&#104;&#46;&#115;&#101;&#62;</author>
    <pubDate>Sat, 17 Jul 2021 14:06:57 +0200</pubDate>
</item>

  </channel>
</rss>
