Bidirectional communication over unix socket (named pipe)

Donn Cave donn at u.washington.edu
Wed Mar 8 23:06:21 CET 2006


In article <1141843099.204588.200970 at i40g2000cwc.googlegroups.com>,
 "J Rice" <rice.jeffrey at gmail.com> 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
endpoint.

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 -
http://docs.hp.com/en/B2355-90136/ch07s06.html

   Donn Cave, donn at u.washington.edu



More information about the Python-list mailing list