UNIX Socket does not send data until closed

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View

I am using PHP persistent sockets and have a problem with them.  The
problem is that PHP only sends the data when the socket is closed.  In
the code example below the counterparty process (peer) received the
connect request from PHP, but then never receives the message sent in
the "fwrite" command below - and consequently never generates the
reply which should be read by the fgets command.

Flushing the socketFP does not make any difference - the only thing
that causes the data to be sent is to fclose it (which defeats the
purpose of having persistent sockets, which I definitely need).

Any help much appreciated.

PHP version 5.2.0-8+etch7, Debian Linux 2.6.18-4-486

Best regards

------------------ Code Sample -----------------------------------
  $SocketFP = pfsockopen("unix:///tmp/hs.socket",0,$errno,$errstr);
  if ($SocketFP == FALSE) {
  ... error handling

  $Msg = sprintf("ConnectId %d\n\r",$OurId);
  $i =fwrite($SocketFP,$Msg);

  if ($i==FALSE) {
  ... error handling

  $message = fgets($SocketFP);

Re: UNIX Socket does not send data until closed

Quoted text here. Click to load it

- doesn't it open the socket in blocking mode anyway? (not sure how
much sense fflush() would make if it were non-blocking).

I suspect its not relevant, though ISR something about newlines and
flushes on streams - but your script above does have a newline char -
but normally where a line is terminated by a CR and LF, the CR comes
first. This may be a problem - I'd try with a different client but
don't know of a generic tool for Unix domain sockets - nc will work
for a TCP socket though.

I'd also suggest checking the value of $i and what fflush() returned.



Site Timeline