steveh@hammer.UUCP (09/04/84)
The following is sample program using Unix Domain sockets for all those people who still can't figure out how to use them. Some notes: o As distributed the include file /usr/include/sys/un.h is wrong. The max path length is 108 not 110 (because it gets padded to 4 byte boundary). o The from address, returned from accept, means nothing in Unix domain. o Casts to sockaddr are not strictly necessary, but keep lint happy. Here is the program: ----- #include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> #define SOCKET "/tmp/socktest" struct sockaddr_un sun = { AF_UNIX, SOCKET }; main () { int s, m; struct sockaddr from; int fromlen = sizeof (from); unlink (SOCKET); if (fork () == 0) { sleep (10); if( (s = socket (AF_UNIX, SOCK_STREAM, 0)) < 0) perror ("child socket"); if (connect (s, (struct sockaddr *) &sun, sizeof (sun)) < 0) perror ("connect"); printf ("child done\n"); } else { if ((s = socket (AF_UNIX, SOCK_STREAM, 0)) < 0) perror ("socket"); if (bind (s, (struct sockaddr *) &sun, sizeof (sun)) < 0) perror ("bind"); if (listen (s, 1) < 0) perror ("listen"); m = 1 << s; if (select (20, &m, 0, 0, 0) < 0) perror ("select"); if (accept (s, &from, &fromlen) < 0) perror ("accept"); printf ("parent done\n"); close(s); unlink(SOCKET); } exit (0); }