| static int unix_stream_socket(void) |
| int fd = socket(AF_UNIX, SOCK_STREAM, 0); |
| die_errno("unable to create socket"); |
| static void unix_sockaddr_init(struct sockaddr_un *sa, const char *path) |
| int size = strlen(path) + 1; |
| if (size > sizeof(sa->sun_path)) |
| die("socket path is too long to fit in sockaddr"); |
| memset(sa, 0, sizeof(*sa)); |
| sa->sun_family = AF_UNIX; |
| memcpy(sa->sun_path, path, size); |
| int unix_stream_connect(const char *path) |
| unix_sockaddr_init(&sa, path); |
| fd = unix_stream_socket(); |
| if (connect(fd, (struct sockaddr *)&sa, sizeof(sa)) < 0) { |
| int unix_stream_listen(const char *path) |
| unix_sockaddr_init(&sa, path); |
| fd = unix_stream_socket(); |
| if (bind(fd, (struct sockaddr *)&sa, sizeof(sa)) < 0) { |