SOCK_STREAM socket in kernel space
John Baldwin
jhb at freebsd.org
Tue Dec 21 12:55:46 UTC 2010
On Tuesday, December 21, 2010 6:39:26 am Mohammad Hedayati wrote:
> I'm about to use a char device for a kind of distributed processing,
> so I've coded the open function as follows. The problem is that
> soaccept returns 0 without populating the raddr. I've checked netstat,
> everything seems to be fine, the socket is created, bound and the
> state is LISTENING. Even the remote is connection is ESTABLISHED. But,
> it cannot receive anything. it says that socket (sock variable) is
> not connected.
Yes, you are calling soaccept() on the wrong socket. You need to wait for a
connection and dequeue the socket that connected and then call soaccept() on
that new socket. Look at kern_accept() in sys/kern/uipc_syscalls.c.
I wonder though if you wouldn't rather be calling soconnect instead? Do you
really need to listen for new connections?
--
John Baldwin
More information about the freebsd-net
mailing list