|  | /* Example of Reading Datagrams | 
|  | Copyright (C) 1991-2016 Free Software Foundation, Inc. | 
|  |  | 
|  | This program is free software; you can redistribute it and/or | 
|  | modify it under the terms of the GNU General Public License | 
|  | as published by the Free Software Foundation; either version 2 | 
|  | of the License, or (at your option) any later version. | 
|  |  | 
|  | This program is distributed in the hope that it will be useful, | 
|  | but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|  | GNU General Public License for more details. | 
|  |  | 
|  | You should have received a copy of the GNU General Public License | 
|  | along with this program; if not, if not, see <http://www.gnu.org/licenses/>. | 
|  | */ | 
|  |  | 
|  | #include <stdio.h> | 
|  | #include <errno.h> | 
|  | #include <unistd.h> | 
|  | #include <stdlib.h> | 
|  | #include <sys/socket.h> | 
|  | #include <sys/un.h> | 
|  |  | 
|  | #define SERVER	"/tmp/serversocket" | 
|  | #define CLIENT	"/tmp/mysocket" | 
|  | #define MAXMSG	512 | 
|  | #define MESSAGE	"Yow!!! Are we having fun yet?!?" | 
|  |  | 
|  | int | 
|  | main (void) | 
|  | { | 
|  | extern int make_named_socket (const char *name); | 
|  | int sock; | 
|  | char message[MAXMSG]; | 
|  | struct sockaddr_un name; | 
|  | size_t size; | 
|  | int nbytes; | 
|  |  | 
|  | /* Make the socket. */ | 
|  | sock = make_named_socket (CLIENT); | 
|  |  | 
|  | /* Initialize the server socket address. */ | 
|  | name.sun_family = AF_LOCAL; | 
|  | strcpy (name.sun_path, SERVER); | 
|  | size = strlen (name.sun_path) + sizeof (name.sun_family); | 
|  |  | 
|  | /* Send the datagram. */ | 
|  | nbytes = sendto (sock, MESSAGE, strlen (MESSAGE) + 1, 0, | 
|  | (struct sockaddr *) & name, size); | 
|  | if (nbytes < 0) | 
|  | { | 
|  | perror ("sendto (client)"); | 
|  | exit (EXIT_FAILURE); | 
|  | } | 
|  |  | 
|  | /* Wait for a reply. */ | 
|  | nbytes = recvfrom (sock, message, MAXMSG, 0, NULL, 0); | 
|  | if (nbytes < 0) | 
|  | { | 
|  | perror ("recfrom (client)"); | 
|  | exit (EXIT_FAILURE); | 
|  | } | 
|  |  | 
|  | /* Print a diagnostic message. */ | 
|  | fprintf (stderr, "Client: got message: %s\n", message); | 
|  |  | 
|  | /* Clean up. */ | 
|  | remove (CLIENT); | 
|  | close (sock); | 
|  | } |