From 6db1cfe81d5b8e516e0c63288bd6d2bfbe84ebac Mon Sep 17 00:00:00 2001 From: Matheus Date: Mon, 24 Oct 2022 15:36:46 -0300 Subject: [PATCH] sockets: expect fd argument --- src/sys/socket.c | 22 ++++++++++++---------- src/sys/syscalls/accept.c | 4 ++-- src/sys/syscalls/connect.c | 2 +- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/sys/socket.c b/src/sys/socket.c index 15b433b7..2ebe4b33 100644 --- a/src/sys/socket.c +++ b/src/sys/socket.c @@ -65,41 +65,43 @@ int socket_listen(struct _socket_t* sock, int backlog){ } -int socket_connect(struct _socket_t* sock, void* addr, socklen_t addrlen){ +int socket_connect(struct _socket_t* sock, void* addr, socklen_t addrlen, fd_t* fd){ switch(sock->family){ case AF_UNIX: - return unsocket_connect(sock, addr, addrlen); + return unsocket_connect(sock, addr, addrlen, fd); default: return EINVAL; } } -int socket_accept(socket_t** peer, socket_t* sock, void* addr, socklen_t* addrlen){ +int socket_accept(socket_t** peer, socket_t* sock, void* addr, socklen_t* addrlen, fd_t* fd){ switch(sock->family){ case AF_UNIX: - return unsocket_accept(peer, sock, addr, addrlen); + return unsocket_accept(peer, sock, addr, addrlen, fd); default: return EINVAL; } } -int socket_send(socket_t* socket, void* buff, socklen_t len, int flags, int* count){ +int socket_send(socket_t* socket, void* buff, size_t len, int flags, int* error, fd_t* fd){ switch(socket->family){ case AF_UNIX: - return unsocket_send(socket, buff, len, flags, count); + return unsocket_send(socket, buff, len, flags, error, fd); default: - return EINVAL; + *error = EINVAL; + return 0; } } -int socket_recv(socket_t* socket, void* buff, socklen_t len, int flags, int* count){ +int socket_recv(socket_t* socket, void* buff, size_t len, int flags, int* error, fd_t* fd){ switch(socket->family){ case AF_UNIX: - return unsocket_recv(socket, buff, len, flags, count); + return unsocket_recv(socket, buff, len, flags, error, fd); default: - return EINVAL; + *error = EINVAL; + return 0; } } diff --git a/src/sys/syscalls/accept.c b/src/sys/syscalls/accept.c index 1eb89831..010694b3 100644 --- a/src/sys/syscalls/accept.c +++ b/src/sys/syscalls/accept.c @@ -65,7 +65,7 @@ syscallret syscall_accept(int sockfd, void* addr, socklen_t* addrlen){ socket_t* peer; - retv.errno = socket_accept(&peer, listenersock, addr, addrlen); + retv.errno = socket_accept(&peer, listenersock, addr, addrlen, fd); if(retv.errno) goto _fail; @@ -89,7 +89,7 @@ syscallret syscall_accept(int sockfd, void* addr, socklen_t* addrlen){ fd_release(connfd); retv.ret = connifd; - + memcpy(addr, &peer->addr_un, peer->addrlen); *addrlen = peer->addrlen; diff --git a/src/sys/syscalls/connect.c b/src/sys/syscalls/connect.c index 38b1d709..f8e8d6e4 100644 --- a/src/sys/syscalls/connect.c +++ b/src/sys/syscalls/connect.c @@ -33,7 +33,7 @@ syscallret syscall_connect(int sockfd, void* addr, size_t addrlen){ goto _ret; } - retv.errno = socket_connect(fd->node->objdata, addr, addrlen); + retv.errno = socket_connect(fd->node->objdata, addr, addrlen, fd); _ret: