Linux
Application Development |
Michael K. Johnson Erik W. Troan |
/* userver.c - simple server for Unix domain sockets */ /* Waits for a connection on the ./sample-socket Unix domain socket. Once a connection has been established, copy data from the socket to stdout until the other end closes the connection, and then wait for another connection to the socket. */ #include <stdio.h> #include <sys/socket.h> #include <sys/un.h> #include <unistd.h> #include "sockutil.h" /* some utility functions */ int main(void) { struct sockaddr_un address; int sock, conn; size_t addrLength; if ((sock = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) die("socket"); /* Remove any preexisting socket (or other file) */ unlink("./sample-socket"); address.sun_family = AF_UNIX; /* Unix domain socket */ strcpy(address.sun_path, "./sample-socket"); /* The total length of the address includes the sun_family element */ addrLength = sizeof(address.sun_family) + strlen(address.sun_path); if (bind(sock, (struct sockaddr *) &address, addrLength)) die("bind"); if (listen(sock, 5)) die("listen"); while ((conn = accept(sock, (struct sockaddr *) &address, &addrLength)) >= 0) { printf("---- getting data\n"); copyData(conn, 1); printf("---- done\n"); close(conn); } if (conn < 0) die("accept"); close(sock); return 0; }