<feed xmlns='http://www.w3.org/2005/Atom'>
<title>opentracker/ot_http.h, branch v2.0.0</title>
<subtitle>An open and free bittorrent tracker
</subtitle>
<id>https://erdgeist.org/gitweb/opentracker/atom?h=v2.0.0</id>
<link rel='self' href='https://erdgeist.org/gitweb/opentracker/atom?h=v2.0.0'/>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/opentracker/'/>
<updated>2026-11-02T20:14:02Z</updated>
<entry>
<title>Move the build sources into src/</title>
<updated>2026-11-02T20:14:02Z</updated>
<author>
<name>Dirk Engling</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-11-02T19:50:24Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/opentracker/commit/?id=ad541c67761b8aa6da1566802c347cac4018d0c2'/>
<id>urn:sha1:ad541c67761b8aa6da1566802c347cac4018d0c2</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Sweep the obsolete CVS Id keyword out of the tree</title>
<updated>2026-11-02T15:55:53Z</updated>
<author>
<name>Dirk Engling</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-11-02T15:55:53Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/opentracker/commit/?id=28d6bf03e1bb8c38fb7e09ade3c5a9c58d68182e'/>
<id>urn:sha1:28d6bf03e1bb8c38fb7e09ade3c5a9c58d68182e</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Make tcp worker multithreaded, too</title>
<updated>2026-10-31T14:59:41Z</updated>
<author>
<name>Dirk Engling</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-10-31T14:59:41Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/opentracker/commit/?id=4d030871c004c917458b5e1c296edcfc689a2e66'/>
<id>urn:sha1:4d030871c004c917458b5e1c296edcfc689a2e66</id>
<content type='text'>
This shamelessly steals the model established in the UDP workers, i.e.
if the kernel is able to bind multiple listening sockets to the same
endpoint, we will share them across threads. If it can't, all threads
will accept on the same socket.

The fast path handles most of the connections, only the rare case of
no data yet on the socket is offloaded to the slow path (which used to
be the mainloop) for completion. This scales nicely, as the higher the
load is, the higher chances are that an accept happens only after the
network roundtrip to the peer completes, leading to more connections
that already have data waiting for us.

We also consolidate the workstruct init and deinit code, preparation
for later unifying all thread state structs for all protocols (mca,
udc and tcp).

The config file gains a per tcp connection worker count and some docs
explaining what this knob buys and costs, nudging the user to either
keep it 0 or dial it up to at least 2.
</content>
</entry>
<entry>
<title>Introduce a fast path assuming that a tcp connection's payload already has arrived at accept time</title>
<updated>2026-10-30T22:11:41Z</updated>
<author>
<name>Dirk Engling</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-10-30T22:11:41Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/opentracker/commit/?id=15f9f81b5a8398fefca023e90d8d1c168ecef620'/>
<id>urn:sha1:15f9f81b5a8398fefca023e90d8d1c168ecef620</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Enforce the invariant that each socket is only ever expected to be read from or written to, never both</title>
<updated>2026-10-30T12:17:39Z</updated>
<author>
<name>Dirk Engling</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-10-30T12:17:39Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/opentracker/commit/?id=cbf4b60df6c6c8c7208dc29708677d24b2724deb'/>
<id>urn:sha1:cbf4b60df6c6c8c7208dc29708677d24b2724deb</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Consolidate all tcp/http tear down into a single http_close function to prevent a rare UAF for expiring connections</title>
<updated>2026-10-30T00:00:52Z</updated>
<author>
<name>Dirk Engling</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-10-30T00:00:52Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/opentracker/commit/?id=79f4110365fe85f4377c50f0893134a8d5e45575'/>
<id>urn:sha1:79f4110365fe85f4377c50f0893134a8d5e45575</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fix: Forgot to add the actual keep alive flag</title>
<updated>2026-10-27T02:08:34Z</updated>
<author>
<name>Dirk Engling</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-10-27T02:08:34Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/opentracker/commit/?id=123afebb4f656946387445d4e9f9e58b2287a49e'/>
<id>urn:sha1:123afebb4f656946387445d4e9f9e58b2287a49e</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Replace libowfat's event waiter with our own abstraction</title>
<updated>2026-10-26T19:03:22Z</updated>
<author>
<name>Dirk Engling</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-10-26T19:03:22Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/opentracker/commit/?id=2d6b6d4da1d9732b2b02989a4374d356ff840d1b'/>
<id>urn:sha1:2d6b6d4da1d9732b2b02989a4374d356ff840d1b</id>
<content type='text'>
It's with a heavy heart that I remove libowfat as my event library from
opentracker.

libowfat is what taught opentracker to walk and then fly. The tracker was
literally standing on the shoulder of giants when I started writing it in
2006. For its time, the event abstraction was unparalleled and it has
held up for many years, and it served the bittorrent community greatly.

https://erdgeist.org/gitweb/opentracker/commit/?id=ad472597c569568bad0526d116b601dfcb36638c

Unfortunately, it is very likely that libowfat will not be maintained
anymore for the foreseeable future, it is already not easy to get its
source from upstream and opentracker started receiving bug reports that I
can not reasonably answer or patch.

Before the project gets more dependent on the limitations of libowfat's
current state, I need to teach opentracker to stand on its own feet and
fly by itself. I've learned a great deal in the process and have even
more respect now for what libowfat pioneered.

The path for opentracker is cleared now. Ground work has already been
laid in the migration process to support multi threaded http processing
while keeping the aggressive reduction of syscalls alive that made the
libowfat+opentracker combo so scalable.

Here be some dragons, though: Even though there is a unit test suite
now, the event loop's rewrite has not been battle tested yet. So you
might want to hold up for a bit before jumping on the solo band wagon.

What awaits at the end will be a long overdue v1.0, which will be named
in honour of Felix.
</content>
</entry>
<entry>
<title>Replace libowfat's iobatch with our own smaller (and probably only temporary) ot_batch</title>
<updated>2026-10-25T21:30:04Z</updated>
<author>
<name>Dirk Engling</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-10-25T21:30:04Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/opentracker/commit/?id=0e3a2189f65354962fc71af41f5aa52261a782e8'/>
<id>urn:sha1:0e3a2189f65354962fc71af41f5aa52261a782e8</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Be stricter about const char*, Wwrite-strings will warn in the future and we don't want to try to overwrite string literals</title>
<updated>2026-10-25T18:42:27Z</updated>
<author>
<name>Dirk Engling</name>
<email>erdgeist@erdgeist.org</email>
</author>
<published>2026-10-25T18:42:27Z</published>
<link rel='alternate' type='text/html' href='https://erdgeist.org/gitweb/opentracker/commit/?id=5bc4c0663576fd99bb06068e6dfd624690865c89'/>
<id>urn:sha1:5bc4c0663576fd99bb06068e6dfd624690865c89</id>
<content type='text'>
</content>
</entry>
</feed>
