Date: Mon, 2 Aug 1999 16:39:25 -0700 From: Xiaodong Shen <xshen@sb.net> To: freebsd-net@FreeBSD.org Subject: unix domain socket Message-ID: <99080217524106.55844@wiggum.com>
next in thread | raw e-mail | index | archive | help
Hi there,
I run a very simple client-server program using Unix Domain Socket on FreeBSD
and Linux, the server part looks like this:
for(;;){
unlink foo; //foo is something like a pipe on local file system
open_socket; //AF_UNIX and SOCK_STREAM, get a socket say fd_listen
bind; // with foo
listen; // say on listening socket: fd_listen, len_queue = 5
select; // select on fd_listen
accept; //get a new socket say fd_conn
do_something; // on the socket fd_conn
close(fd_conn);
close(fd_listen);
}
On the client side I fork several child processes to simulate concurrent
connections to the server.
Results:
Linux: all the connections are caught and handled by server.
FreeBSD: some of the connections are missed during select() on server.
Question:
For FreeBSD when you close the listening socket, those connnections left in the
listening queue that have not accepted by server will be cleared immediately
in stead of hanging there like the case for Linux, is that right? Is there
any BSD expert could give an explanation of what really happen in BSD's kernel?
Should this be considered a bug of FreeBSD?
Thanks a lot,
Xiaodong Shen
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-net" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?99080217524106.55844>
