I'd like to see support for server connections in usocket soon. Is any work being done at the moment in this direction? If not, I'd be happy to work on it.
That's great to hear.
I am working on it, but at large intervals, meaning I need to restart every time (which is too bad and prohibiting progress).
I have several problems with creating server sockets:
1. I need tests, but how do we test the server side given a number of restrictions on many systems: * firewalls * threaded as well as non-threaded lisps * non-cross platform running of external programs
2. I am trying to find out the common elements in the different interfaces provided at the moment by the currently supported lisp variants. ABCL isn't the norm there: I have in the past successfully submitted patches which implemented behaviours I needed to support a minimal client interface. Franz says they can't give me more than the current external interface because not all platforms they support have BSD sockets... So... That's where I left off, thinking I need an interface not necessarily restricted to IP sockets. That wasn't the complex part :-)
These requirements came up: - Support for other-than-ipv4 addresses/sockets - Support for create-time options (such as REUSEADDRESS)
And it got complex when I got myself mixed up with sockets listening for a stream connection and sockets listening for datagrams. I think those shouldn't go through the same interface, but that's where I did get stuck.
So, with respect to (1), we could write a script which starts 2 sbcl instances; one as the client, the other as the server. After finishing the server, the script can kill the client. Or we could even implement the client in a different language (in which we could implement the starting script too: python comes to mind here).
With respect to (2), I'd like to create 2 interfaces, I think something like this:
(defun create-datagram-socket (<parameters>) <implementation>)
and
(defun create-stream-serving-socket (<parameters>) <implementation>)
Where I think the latter could be defined as
(defun create-stream-serving-socket (options &rest address) ...)
It's not completely compatible with 'socket-connect', but we can change that right before 1.0.
What were your ideas?
Thanks for offering to help out! I hope we can work out the server side RSN (Real Soon Now).
bye,
Erik.