poll() but there was a race condition where the thread trying
to unblock poll() could send the signal before the polling
thread had entered poll(). Now using a pipe and polling on
that and the client's sockets, and just writing a byte into
the pipe to unblock poll. This persists until the next call
to poll() so we might force poll() to return once unnecessarily
but that's not a problem. This change makes the BSD code
similar to the winsock code, which uses a winsock event instead
of a pipe.
event loop model. Streams, stream filters, and sockets are
converted. Client proxies are almost converted. CServer is
in progress. Removed all HTTP code. Haven't converted the
necessary win32 arch stuff.
an event queue and events, TCP sockets converted to use events,
unix multithreading and network stuff converted, and an X Windows
event queue subclass.
lib/arch. This should make porting easier. Will probably
continue to refactor a little more, moving platform dependent
event handling stuff into lib/platform.