commit aaf9958c5f321b27c1090e1ef34c18ef8ae83504
parent 946b383dfa944b33b90367cb21612d2a8ff9d2a3
Author: grunfink <grunfink@noreply.codeberg.org>
Date: Sun, 29 Dec 2024 22:40:22 +0000
Merge pull request 'Adding support for IPv6' (#256) from hb9hnt/snac2:master into master
Reviewed-on: https://codeberg.org/grunfink/snac2/pulls/256
Diffstat:
1 file changed, 34 insertions(+), 1 deletion(-)
diff --git a/xs_socket.h b/xs_socket.h
@@ -54,7 +54,39 @@ int xs_socket_server(const char *addr, const char *serv)
/* opens a server socket by service name (or port as string) */
{
int rs = -1;
- struct sockaddr_in host;
+#ifndef WITHOUT_GETADDRINFO
+ struct addrinfo *res;
+ struct addrinfo hints;
+ int status;
+
+ memset(&hints, '\0', sizeof(hints));
+
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
+
+ if (getaddrinfo(addr, serv, &hints, &res) != 0) {
+ goto end;
+ }
+
+ rs = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
+
+ /* reuse addr */
+ int i = 1;
+ setsockopt(rs, SOL_SOCKET, SO_REUSEADDR, (char *)&i, sizeof(i));
+
+ status = bind(rs, res->ai_addr, res->ai_addrlen);
+ if (status == -1) {
+ fprintf(stderr, "Error binding with status %d\n", status);
+ close(rs);
+ rs = -1;
+ }
+ else {
+
+ listen(rs, SOMAXCONN);
+ }
+
+#else /* WITHOUT_GETADDRINFO */
+ struct sockaddr_in host;
memset(&host, '\0', sizeof(host));
@@ -89,6 +121,7 @@ int xs_socket_server(const char *addr, const char *serv)
listen(rs, SOMAXCONN);
}
+#endif /* WITHOUT_GETADDRINFO */
end:
return rs;
}