Bidirectional communication over unix socket (named pipe)

Donn Cave donn at
Wed Mar 8 23:06:21 CET 2006

In article <1141843099.204588.200970 at>,
 "J Rice" <rice.jeffrey at> wrote:

> Hi Donn,
> Not sure I fully understand your suggestion.  bind() only works once --
> I can't bind again in the client.  Same thing with connect() -- once I
> issue a connect in the server, it rejects it in the client.
> Doing this as a stream works for what I want, but I would like to
> understand why it didn't work with datagram.

Right, bind should be on one end only, as it creates
the actual socket file.

Connect works on either end, with SOCK_DGRAM.  From
man 2 connect:

     The parameter s is a socket.  If it is of type SOCK_DGRAM,
     this call specifies the peer with which the socket is to be
     associated; this address is that to which datagrams are to
     be sent, and the only address from which datagrams are to be
     received.  If the socket is of type SOCK_STREAM, this call
     attempts to make a connection to another socket.

However, even if we're straight on this, I confess I
have only addressed your question about the unconnected

The other part of the problem remains, as I don't know
how to get data to actually go both ways.  I was a little
surprised by this, and have not been able to scare up any
explicit documentation, but the only example program I
could find for two-way UNIX domain datagram IPC, uses two
sockets, not one -

   Donn Cave, donn at

More information about the Python-list mailing list