--- a/src/network.c Sun Mar 29 13:26:00 2026 +0200 +++ b/src/network.c Sun Mar 29 15:17:28 2026 +0200 @@ -29,24 +29,22 @@ #include <stdlib.h> #include <string.h> +#include <stdio.h> +#include <unistd.h> +#include <sys/un.h> #include "network.h" -#include <stdio.h> - -#define new_socket() socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); - -int net_create(Server *server, short port) { - server->info = NULL; - - struct sockaddr_in addr; - addr.sin_family = AF_INET; - addr.sin_addr.s_addr = INADDR_ANY; - addr.sin_port = htons(port); - - server->fd = new_socket(); +int net_create_tcp(Server *server, short port) { + memset(server, 0, sizeof(Server)); + server->fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (server->fd > -1) { int one = 1; setsockopt(server->fd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(int)); + + struct sockaddr_in addr; + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = INADDR_ANY; + addr.sin_port = htons(port); if (bind(server->fd, (struct sockaddr*)&addr, sizeof(addr))) { server->fd = -1; return 1; @@ -58,21 +56,52 @@ } } -static int getaddrinfo_intrnl(char *host, char *port, struct addrinfo **info) { +int net_find_tcp(Server *server, char *host, short port) { + memset(server, 0, sizeof(Server)); + server->fd = -1; + struct addrinfo hints = {0}; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; hints.ai_family = AF_INET; - - return getaddrinfo(host, port, &hints, info); + char portstr[6]; + sprintf(portstr, "%hd", port); + return getaddrinfo(host, portstr, &hints, &server->info); } -int net_find(Server *server, char *host, short port) { +int net_create_sock(Server *server, char * path) { + memset(server, 0, sizeof(Server)); + server->fd = socket(AF_UNIX, SOCK_STREAM, 0); + if (server->fd > -1) { + struct sockaddr_un addr; + addr.sun_family = AF_UNIX; + addr.sun_family = AF_UNIX; + strncpy(addr.sun_path, path, sizeof(addr.sun_path) - 1); + if (bind(server->fd, (struct sockaddr*)&addr, sizeof(addr))) { + server->fd = -1; + return 1; + } else { + return 0; + } + } else { + return 1; + } +} + +int net_find_sock(Server *server, char *path) { memset(server, 0, sizeof(Server)); server->fd = -1; - char portstr[6]; - sprintf(portstr, "%hd", port); - return getaddrinfo_intrnl(host, portstr, &(server->info)); + + server->info = calloc(1, sizeof(struct addrinfo)); + server->info->ai_family = AF_UNIX; + server->info->ai_socktype = SOCK_STREAM; + server->info->ai_protocol = 0; + struct sockaddr_un *addr = malloc(sizeof(struct sockaddr_un)); + addr->sun_family = AF_UNIX; + strncpy(addr->sun_path, path, sizeof(addr->sun_path) - 1); + server->info->ai_addr = (struct sockaddr*) addr; + server->info->ai_addrlen = sizeof(struct sockaddr_un); + return 0; } int net_listen(Server *server) { @@ -92,7 +121,11 @@ Client* client = calloc(1, sizeof(Client)); client->fd = -1; - server->fd = new_socket(); + server->fd = socket( + server->info->ai_family, + server->info->ai_socktype, + server->info->ai_protocol + ); server->client = client; if (server->fd == -1) { @@ -102,19 +135,21 @@ return connect(server->fd, server->info->ai_addr, server->info->ai_addrlen); } -int net_destroy(Server *server) { +void net_destroy(Server *server) { if (server->info) { freeaddrinfo(server->info); } if (server->client) { shutdown(server->client->fd, SHUT_RDWR); + close(server->client->fd); free(server->client); + server->client = NULL; } if (server->fd > -1) { - return shutdown(server->fd, SHUT_RDWR); + shutdown(server->fd, SHUT_RDWR); + close(server->fd); + server->fd = -1; } - - return 0; } void net_send_code(int socket, uint8_t code) {