Subject: Unix domain sockets
To: None <current-users@netbsd.org>
From: Martin Husemann <martin@rumolt.teuto.de>
List: current-users
Date: 05/05/1999 20:37:14
I feel a little stupid to ask this here, but I must be missing
something realy obvious...
I have a daemon that opens a local socket to talk to a control programm
and the control program. The daemon works fine (and when I first implemented
it some time ago the communication worked fine too), it runs and does
its job. Netstat lists its socket:
Active UNIX domain sockets
Address Type Recv-Q Send-Q Inode Conn Refs Nextref Addr
[...]
f03c0000 stream 0 0 f2eeeccc 0 0 0 /var/run/isdn-monitor
but ls doesn't show it:
ls -l /var/run/log /var/run/isdn-monitor says:
srw-rw-rw- 1 root wheel 0 May 5 19:49 /var/run/log
/var/run/isdn-monitor: No such file or directory
And the client program can't open the socket - same error.
What is wrong here? This is all on -current from yesterdays sources.
Martin
P.S.: just in case it matters: here is the code used to create the
socket by the daemon. As you see the daemon would exit if it couldn't
create the socket, and netstat see it, and the daemon works...
/* const char * name */
int s;
struct sockaddr_un sa;
/* create and setup socket */
s = socket(AF_LOCAL, SOCK_STREAM, 0);
if (s == -1) {
log(LL_ERR, "could not create local monitor socket, errno = %d", errno);
exit(1);
}
unlink(name);
memset(&sa, 0, sizeof sa);
sa.sun_len = sizeof sa;
sa.sun_family = AF_LOCAL;
strcpy(sa.sun_path, name);
if (bind(s, (struct sockaddr *)&sa, sizeof sa)) {
log(LL_ERR, "could not bind local monitor socket [%s], errno = %d", name, errno);
exit(1);
}
if (listen(s, 0)) {
log(LL_ERR, "could not listen on local monitor socket, errno = %d", errno);
exit(1);
}