Using UNIX sockets with Erlang

Scott Lystig Fritchie <>
Tue Sep 18 20:30:06 CEST 2001


>>>>> "jm" == =?iso-8859-1?q?J=E9r=F4me?= Marant <> writes:

jm> I'd like to use UNIX socket with Erlang but I did not find any
jm> module (both within the release and in contribs) supporting this.

I haven't picked apart the R8 pre-release to see if UNIX domain
sockets were supported.  They are not in R7 and previous releases.  If
I recall correctly, they aren't supported because they aren't portable
to all platforms the Erlang VM runs on.  Someone more official could
probably give an official explanation.

When I was at Sendmail I wrote a UNIX domain socket driver.  It works
(for the RPC application we were working on at that time), but it
doesn't implement a lot of things that the TCP driver does (e.g. all
the {packet, PacketType} encoding types).  It's based on the TCP
driver code, so eventually we need to bundle it up into a useful
distribution and recontribute it back to the community as the license
demands.

If you're really, *really* itching to use it, I can try putting the
source together into something sortof-useful.  Let me know.

Here's a not-so-casual observation: the current implementation of the
Sendmail UNIX domain socket driver sends messages such as:

    {unixdom, Socket, Data}, {unixdom_closed, Socket},
    {unixdom_error, Socket, Reason}

... mimicing:

    {tcp, Socket, Data}, {tcp_closed, Socket}, {tcp_error, Socket, Reason}

However, it was a real pain to take code already written for TCP use
and use UNIX domain sockets instead: all the message pattern matching
had to be edited.  In contrast, the underlying API for stream-type
sockets is the same regardless of the family used.  Ditto for
datagram-type sockets.

-Scott



More information about the erlang-questions mailing list