Re: AF_UNIX sockets: strange behaviour

From: Alex Riesen
Date: Wed Nov 17 2004 - 17:56:29 EST


On Wed, 17 Nov 2004 16:29:14 +0100 (CET), Catalin Drula
<catalin.drula@xxxxxxx> wrote:
> I have a small application that communicates over Bluetooth. I use
> connection-oriented UNIX domain sockets (AF_UNIX, SOCK_STREAM) to
> communicate between the applications's threads. When reading from
> one of these sockets, I get a strange behaviour: if I read all the
> bytes that are available (13, in this case) all at once, it's fine;
> however, if I try to read in two smaller batches (say, first time
> 6, and second time 7), the first read returns (with the 6 bytes), but
> the second read never returns.

2.6.9, works. Could you post your code?

#include <unistd.h>
#include <stdio.h>
#include <sys/socket.h>

int main(int argc, char **argv)
{
char buf[13];
int s[2];
if ( socketpair(AF_UNIX, SOCK_STREAM, 0, s) < 0 )
{
perror("socketpair");
return 1;
}
if ( fork() == 0 )
{
close(s[0]);
write(s[1], "023456789012", 13);
read(s[1], buf, 1); /* wait for parent */
}
else
{
close(s[1]);
if ( read(s[0], buf, 6) != 6 )
perror("6");
if ( read(s[0], buf, 7) != 7 )
perror("6");
close(s[0]);
}
return 0;
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/