59 lines
1.3 KiB
C
59 lines
1.3 KiB
C
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <sys/socket.h>
|
|
#include <sys/un.h>
|
|
#include <unistd.h>
|
|
const char *path = "/tmp/socket_test";
|
|
void handle_error(char *txt)
|
|
{
|
|
perror(txt);
|
|
exit(-1);
|
|
}
|
|
|
|
int main()
|
|
{
|
|
int sfd, cfd;
|
|
socklen_t peer_addr_size;
|
|
struct sockaddr_un my_addr, peer_addr;
|
|
|
|
sfd = socket(AF_UNIX, SOCK_STREAM, 0);
|
|
if (sfd == -1)
|
|
handle_error("socket");
|
|
|
|
memset(&my_addr, 0, sizeof(my_addr));
|
|
my_addr.sun_family = AF_UNIX;
|
|
strncpy(my_addr.sun_path, path,
|
|
sizeof(my_addr.sun_path) - 1);
|
|
|
|
if (bind(sfd, (struct sockaddr *)&my_addr,
|
|
sizeof(my_addr)) == -1)
|
|
handle_error("bind");
|
|
|
|
if (listen(sfd, 1) == -1)
|
|
handle_error("listen");
|
|
|
|
/* Now we can accept incoming connections one
|
|
at a time using accept(2). */
|
|
|
|
peer_addr_size = sizeof(peer_addr);
|
|
cfd = accept(sfd, (struct sockaddr *)&peer_addr,
|
|
&peer_addr_size);
|
|
if (cfd == -1)
|
|
handle_error("accept");
|
|
|
|
double d1;
|
|
read(cfd, (void *)&d1, sizeof(double));
|
|
printf("%f\n", d1);
|
|
close(cfd);
|
|
/* Code to deal with incoming connection(s)... */
|
|
|
|
if (close(sfd) == -1)
|
|
handle_error("close");
|
|
|
|
if (unlink(path) == -1)
|
|
handle_error("unlink");
|
|
|
|
return 0;
|
|
} |