From 6ab3de6abdaadd2a61aab9feff7cae66dd727e1f Mon Sep 17 00:00:00 2001 From: Matheus Date: Sun, 5 Jul 2026 16:17:07 -0300 Subject: [PATCH] localsocket: properly return peername --- kernel-src/io/net/localsocket.c | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/kernel-src/io/net/localsocket.c b/kernel-src/io/net/localsocket.c index 6ed1ce9f..5d802bb8 100644 --- a/kernel-src/io/net/localsocket.c +++ b/kernel-src/io/net/localsocket.c @@ -1183,8 +1183,35 @@ static int localsock_getname(socket_t *socket, sockaddr_t *addr) { } static int localsock_getpeername(socket_t *socket, sockaddr_t *addr) { - addr->path[0] = '\0'; - return 0; + localsocket_t *localsocket = (localsocket_t *)socket; + MUTEX_ACQUIRE(&socket->mutex); + int error = 0; + + localpair_t *pair = localsocket->pair; + if (pair == NULL) { + error = ENOTCONN; + goto leave; + } + + MUTEX_ACQUIRE(&pair->mutex); + + localsocket_t *peer = pair->client == localsocket ? pair->server : pair->client; + if (peer == NULL) { + error = ENOTCONN; + goto leave_pair; + } + + if (peer->bindpath) + strcpy(addr->path, peer->bindpath); + else + addr->path[0] = '\0'; + + leave_pair: + MUTEX_RELEASE(&pair->mutex); + + leave: + MUTEX_RELEASE(&socket->mutex); + return error; } static int localsock_shutdown(socket_t *socket, int how) {