[Lazarus] Cross *nix Socket Signaling Mechanism
Michael Van Canneyt
michael at freepascal.org
Thu Dec 30 20:52:36 CET 2010
On Thu, 30 Dec 2010, Andrew Brunner wrote:
> I'm developing a cross platform social computing platform that implements HTTP, XMPP, WebSockets (and more) part of the
> core principals is to offer scalability across transports. When I started this project, about 4 years ago, it was under Delphi and
> Win64; and I left Delphi to offer this product on MAC and *nix platforms. Well, I'm nearly ready to release but had to address a few
> issues first.
> I have committed to deprecating polling in place of signaling and presently have no way of knowing when data has arrived or a socket
> has been closed under every other OS other than Windows. :-)
> One of the biggest current issues is with abnormal latencies with regard to my cross platform implementation of sockets using a
> application level polling mechanism. Having tested server implements across various transports - I determined it was worth the effort
> to re-introduce event driven signaling and deprecate polling. I need to access kernel level code but have just starting reading about
> caveats on *nixes.
> Presently, I have a cross platform mechanism for socket signals and "integrated" my windows code for Windows 32/64 builds. Not much
> testing was needed as I just borrowed code and ifdef Windows and included windows sockets which comes with signaling capabilities.
> I want to tie into some sort of system under Lazarus or FPC libraries that offer (high scale) cross platform support using signaling.
> I found "Main Loop Hooks" for Lazarus but wanted to know if it can be used for sockets and how scalable is it. Anyone have any
> comments or thoughts regarding this?
It can be used with handles.
> Anyone want to respond with some basic semantics regarding signals and socket handles under Linux/Unix?
In short: on unix, you're better off with select() and friends.
(which is basically what the main loop hooks in lazarus do)
I have no knowledge of an actual signaling mechanism for data.
epoll, select, poll all use a wait loop.
More information about the Lazarus