#include #include #include #include #define SOCKPATH "localsocket" void err_sys( const char * const ); int main() { struct sockaddr_un uaddr, caddr; int usock, res; socklen_t ulen; char buffer[ 128 ]; usock = socket( PF_LOCAL, SOCK_DGRAM, 0 ); if( usock == -1 ) err_sys( "socket()" ); memset( &uaddr, 0, sizeof(uaddr) ); uaddr.sun_family = AF_LOCAL; strcpy( uaddr.sun_path, SOCKPATH ); unlink( SOCKPATH ); res = bind( usock, (struct sockaddr*)&uaddr, SUN_LEN(&uaddr) ); if( res == -1 ) err_sys( "bind()" ); printf( "Socket bind()\n" ); for( ; ; ) { ulen = SUN_LEN(&uaddr); ulen = 0; printf( "uaddr sockaddr_un has %d\n", ulen ); res = recvfrom( usock, buffer, sizeof(buffer), 0, (struct sockaddr*)&caddr, &ulen ); if( res == -1 ) err_sys( "recvfrom()" ); buffer[res] = '\0'; printf( "Received %d bytes\n", res ); printf( "Remote structure has %d bytes\n", ulen ); /* (unsigned)(htons(*((short*)caddr.sun_path))) ); */ res = sendto( usock, "Hello\r\n", 7, 0, (struct sockaddr*)&caddr, ulen ); if( res == -1 ) err_sys( "sendto()" ); } } void err_sys( const char * const mesg ) { perror( mesg ); exit( -1 ); }