1.1.0 release

This commit is contained in:
seajee
2025-04-26 01:59:08 +02:00
parent 2813bc77c0
commit 4cfcdeac71
7 changed files with 131 additions and 12 deletions

44
sock.h
View File

@@ -1,10 +1,11 @@
// sock - v1.0.3 - MIT License - https://github.com/seajee/sock.h
// sock - v1.1.0 - MIT License - https://github.com/seajee/sock.h
#ifndef SOCK_H_
#define SOCK_H_
#include <arpa/inet.h>
#include <assert.h>
#include <errno.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
@@ -76,6 +77,9 @@ ssize_t sock_recvfrom(Sock *sock, void *buf, size_t size, SockAddr *addr);
// Close a socket
void sock_close(Sock *sock);
// Log last errors to stderr
void sock_log_errors(void);
#endif // SOCK_H_
#ifdef SOCK_IMPLEMENTATION
@@ -111,7 +115,6 @@ Sock *sock_create(SockAddrType domain, SockType type)
if (sock == NULL) {
return NULL;
}
memset(sock, 0, sizeof(*sock));
sock->type = type;
@@ -177,12 +180,37 @@ Sock *sock_accept(Sock *sock)
if (res == NULL) {
return NULL;
}
memset(res, 0, sizeof(*res));
res->type = sock->type;
res->fd = fd;
SockAddr *addr = &res->addr;
addr->len = sizeof(addr->sockaddr);
getpeername(res->fd, &addr->sockaddr, &addr->len);
// TODO: This is duplicated code from sock_recvfrom
switch (addr->sockaddr.sa_family) {
case AF_INET: {
struct sockaddr_in *ipv4 = &addr->ipv4;
addr->type = SOCK_IPV4;
addr->port = ntohs(ipv4->sin_port);
addr->len = sizeof(*ipv4);
inet_ntop(AF_INET, &ipv4->sin_addr, addr->str, sizeof(addr->str));
} break;
case AF_INET6: {
struct sockaddr_in6 *ipv6 = &addr->ipv6;
addr->type = SOCK_IPV6;
addr->port = ntohs(ipv6->sin6_port);
addr->len = sizeof(*ipv6);
inet_ntop(AF_INET6, &ipv6->sin6_addr, addr->str, sizeof(addr->str));
} break;
default: {
assert(false && "Unreachable address family");
} break;
}
return res;
}
@@ -192,6 +220,8 @@ bool sock_connect(Sock *sock, SockAddr addr)
return false;
}
sock->addr = addr;
return true;
}
@@ -251,11 +281,19 @@ void sock_close(Sock *sock)
free(sock);
}
void sock_log_errors(void)
{
fprintf(stderr, "SOCK ERROR: %s\n", strerror(errno));
}
#endif // SOCK_IMPLEMENTATION
/*
Revision history:
1.1.0 (2025-04-26) New sock_log_errors function
Fill new Sock's SockAddr after a sock_accept
Save remove SockAddr in Sock in sock_connect
1.0.3 (2025-04-25) Fix incorrect usage of inet_pton
1.0.2 (2025-04-25) Fix sock_recvfrom not recognizing the address
family