I've just made a new round of releases. Changes WRT the previous version are:
* NET.SOCKETS: TCP socket options for Linux and FreeBSD have been added, so now you can set options like TCP_MAXSEG and TCP_NODELAY
* NET.SOCKETS: calling BIND-ADDRESS on active sockets now works, although probably it is seldom needed
* NET.SOCKETS: the function MAKE-SOCKET have been renamed to CREATE-SOCKET, and an implementation of MAKE-SOCKET compatible with Allegro 8 has been added basically you can now do something like this: (make-socket :address-family :internet :type :stream :connect :passive :reuse-address t :local-host host :local-port port)
* NET.SOCKETS: it is now possible to specify an active socket's external format in MAKE-SOCKET and setting it through (SETF EXTERNAL-FORMAT-OF) works better; accepted values are: - keywords: either :default or the name of an encoding, :utf-8 or :ascii for instance - lists specifying the encoding and the end-of-line flavour(:unix, :mac or :dos): '(:utf-8 :line-terminator :dos) - EXTERNAL-FORMAT structures, as returned by IOENC:MAKE-EXTERNAL-FORMAT
* a modified version of CL-SMTP has been added in package NET.SMTP-CLIENT the system depends on CL-BASE64 and has only one external symbol: the function SEND-EMAIL
* NET.SOCKETS: the INVALID-ADDRESS condition has been eliminated, the address conversion functions(like DOTTED-TO-VECTOR, VECTOR-TO-COLON-SEPARATED ...) now signal only TYPE-ERROR or PARSE-ERROR
* IO.MULTIPLEX: EVENT-DISPATCH has been improved, and two more functions have been exported: EXIT-EVENT-LOOP and EVENT-BASE-EMPTY-P(which returns T when no events are being monitored by an event base) A special variable *MAXIMUM-EVENT-LOOP-TIMEOUT* has been exported: it serves to limit the poll time of the event loop in case a thread other than the one of the event loop accesses the event base. Defaults to 1 (in seconds) but can also be bound to NIL which means no timeout(or infinity)