Giovanni's Diary > Subjects > Programming > Gists >
C / unix_server.c
Create an unix socket server that reads data sent to it.
// SPDX-License-Identifier: MIT // Author: Giovanni Santini // Github: @San7o // Create an unix socket server that reads data sent to it #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <time.h> #include <sys/un.h> #define MSG_BUFF_SIZE 1024 #define UNIX_SOCKET_FILE "/tmp/my-unix-socket" int main(void) { int listenfd = 0, connfd = 0; struct sockaddr_un serv_addr; char msg_buff[MSG_BUFF_SIZE]; listenfd = socket(AF_UNIX, SOCK_STREAM, 0); if (listenfd < 0) { perror("Error creating socket"); return 1; } memset(&serv_addr, 0, sizeof(serv_addr)); memset(msg_buff, 0, MSG_BUFF_SIZE); serv_addr.sun_family = AF_UNIX; strcpy(serv_addr.sun_path, UNIX_SOCKET_FILE); if (bind(listenfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) { perror("Error binding"); return 1; } printf("Listening on file %s\n", UNIX_SOCKET_FILE); if (listen(listenfd, 10) < 0) { perror("Error listening for connections"); return 1; } connfd = accept(listenfd, (struct sockaddr*)NULL, NULL); if (connfd < 0) { perror("Error accepting connection"); return 1; } ssize_t bytes; while (1) { bytes = read(connfd, msg_buff, MSG_BUFF_SIZE); if (bytes == 0) continue; printf("Server received: %s\n", msg_buff); memset(msg_buff, 0, MSG_BUFF_SIZE); } close(connfd); return 0; }