#include #include #include #include #include #include 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; }