/* a server in the unix domain. The pathname of the socket address is passed as an argument */ #include #include #include #include int main(int argc, char *argv[]) { int listener; struct sockaddr_un serv_addr; int len; int conn; listener = socket(AF_UNIX,SOCK_STREAM,0); if( listener < 0 ) { perror( "couldn't create socket" ); return -1; } bzero( (char *)&serv_addr, sizeof(serv_addr) ); serv_addr.sun_family = AF_UNIX; unlink( "/tmp/ugh" ); strcpy( serv_addr.sun_path, "/tmp/ugh" ); if( bind( listener, (struct sockaddr *)&serv_addr, strlen(serv_addr.sun_path) + sizeof(serv_addr.sun_family) ) < 0 ) { perror( "bind failed" ); return -1; } listen( listener, 0 ); while( 1 ) { conn = accept( listener, NULL, NULL ); if( conn < 0 ) { perror( "accept() failed" ); return -1; } len = write( conn, "one", 3 ); if(len != 3) { printf("short write: %d!\n", len); } shutdown( conn, 2 ); close( conn ); } return 0; }