The reason I used LNet initially was that I needed Telnet for a terminal emulator (to connect to the Hercules IBM mainframe emulator so I could investigate VM/CMS), and Telnet isn't sexy enough for most library developers to take seriously :-) Hence there's a slightly-modified version of LNet bundled with FPC itself.
The problem is that it's /ancient/... and that's somebody who dabbles with mainframe emulators talking. Instead of using one or more background threads- supported by just about everything later than Delphi v1- it hooks into the main event loop, and when I dove in trying to work out why a terminated server didn't release its "well known" port... well, it wasn't exactly easy and that's why I wrote my own Telnet implementation.
The people at Berkeley were pretty smart, after all that's where Wirth got his PhD so we have to give them some credit :-)
As a result the Berkeley Sockets API does its designated job pretty well: frankly, once one gets to reliable documentation and examples it's far easier to use than most of the "convenience layers" that people have tried to put on top of it: and that's particularly true for a packet-oriented protocol like UDP.
You don't need a background thread for UDP, since it's strictly packet-in/packet-out. The real weakness however it that packets can get lost or reordered: but the likelihood of that happening on an intranet let alone in the context of a single machine is negligible.
MarkMLl