41 lines
1.2 KiB
C
41 lines
1.2 KiB
C
#include "common.h"
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <sys/socket.h>
|
|
#include <sys/un.h>
|
|
#include <unistd.h>
|
|
|
|
int main(int argc, char **argv) {
|
|
struct sockaddr_un sa_server, sa_client;
|
|
int sock_fd;
|
|
static char buffer[BUFFER_SIZE];
|
|
|
|
EXPECT(sock_fd = socket(AF_UNIX, SOCK_DGRAM, 0), > 0);
|
|
|
|
memset(&sa_server, 0, sizeof(sa_server));
|
|
memset(&sa_client, 0, sizeof(sa_client));
|
|
|
|
sa_server.sun_family = sa_client.sun_family = AF_UNIX;
|
|
snprintf(sa_client.sun_path, sizeof(sa_client.sun_path), CLIENT_SOCKET_PATH, (long)getpid());
|
|
strncpy(sa_server.sun_path, DAEMON_SOCKET_PATH, sizeof(sa_server.sun_path) - 1);
|
|
|
|
EXPECT(bind(sock_fd, (struct sockaddr *)&sa_client, sizeof(struct sockaddr_un)), == 0);
|
|
|
|
for (int i = 1; i < argc; i++) {
|
|
strncat(buffer, argv[1], BUFFER_SIZE - strlen(buffer) - 1);
|
|
if (i != argc - 1) {
|
|
strncat(buffer, " ", BUFFER_SIZE - strlen(buffer) - 1);
|
|
}
|
|
}
|
|
|
|
EXPECT(sendto(sock_fd, buffer, strlen(buffer), 0, (struct sockaddr *)&sa_server, sizeof(sa_server)), == strlen(buffer));
|
|
int data_len;
|
|
while ((data_len = recv(sock_fd, buffer, BUFFER_SIZE, 0)) > 0) {
|
|
printf("%.*s", data_len, buffer);
|
|
}
|
|
|
|
unlink(sa_client.sun_path);
|
|
exit(EXIT_SUCCESS);
|
|
}
|