procedure: server-listen handle-request socket #:parallelism #:exception-key ->
procedure:{port:client -> unspecified} port:socket [#:key parallelism integer/false] -> unspecified
listen for new connections on socket and call handle-request with a input/output port for the client.
handle-request is called in the next free thread in a thread-pool.
the server is stopped when it receives the signal SIGINT or SIGTERM.
by default all exceptions are catched, printed and the server continues listening.
this can be changed with giving a different exception-key, which is passed to catch,
for example one that will never be matched
procedure: server-socket address #:port #:type #:protocol #:set-options #:non-blocking ->
create a socket with default options. the socket type is inferred
from the address, which can be an ip4 or ip6 address (tcp) or a filesystem path (unix socket)