/* * unixcli.c * * connects to an UNIX domain socket, sends a message to it, and disconnects. * * * Created by Mij <mij@bitchx.it> on 18/12/05. * Original source file available on http://mij.oltrelinux.com/devel/unixprg/ */ #include <stdio.h> /* socket(), bind() */ #include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> /* write(), close() */ #include <unistd.h> /* strlen() */ #include <string.h> /* exit() */ #include <stdlib.h> /* maximum size available for an incoming message payload */ #define MAX_MSGLEN 100 /* path of the UNIX domain socket in filesystem */ #define SERVERSOCK_PATH "/tmp/mytmpunixsock" int main() { int sock, err, i = 0; char ch, messagebuf[MAX_MSGLEN]; struct sockaddr_un servaddr; /* create a UNIX domain, connectionful socket */ sock = socket(AF_UNIX, SOCK_STREAM, 0); if (sock < 0) { perror("In socket()"); exit(1); } /* connect the socket to the server socket described by "servaddr" */ servaddr.sun_family = AF_UNIX; sprintf(servaddr.sun_path, SERVERSOCK_PATH); err = connect(sock, (struct sockaddr *)&servaddr, sizeof(servaddr)); if (err) { perror("In connect()"); exit(1); } /* write a message to the server */ err = write(sock, "Hello server.\n", strlen("Hello server.\n")); if (err < 0) { perror("In write()"); exit(1); } printf("Message sent:\n\t@length: %d bytes\n\t@content: %s\n", err, "Hello server.\n"); /* receive the response from the server */ do { err = read(sock, &ch, 1); /* read one byte from the socket */ if (err <= 0) { printf("Premature end-of-file (0) or read() error (<0)? %d\n", err); break; } messagebuf[i++] = ch; } while (ch != '\n'); messagebuf[i] = '\0'; /* close the socket */ close(sock); printf("Response received:\n\t@length: %lu bytes\n\t@content: %s\n", strlen(messagebuf), messagebuf); return 0; }