From 8aec0abdc638c88c7bc5f4ea5d68b397a80486f1 Mon Sep 17 00:00:00 2001 From: Matthias Kruk Date: Sat, 5 Oct 2019 15:31:45 +0900 Subject: [PATCH] Add (incomplete) sosetopt() and sogetopt() functions --- kernel/core/socket.c | 55 ++++++++++++++++++++++++++++++++++++++++++++ kernel/core/socket.h | 3 +++ 2 files changed, 58 insertions(+) diff --git a/kernel/core/socket.c b/kernel/core/socket.c index 8d05050..35157ea 100644 --- a/kernel/core/socket.c +++ b/kernel/core/socket.c @@ -228,3 +228,58 @@ int sofree(int sockfd) return(ret_val); } + +int sosetopt(int sockfd, int opt, const void *data, size_t dlen) +{ + struct socket *so; + int ret_val; + + /* sanity-check input */ + if(sockfd < 0 || sockfd >= (sizeof(_sockets) / sizeof(_sockets[0])) || + !SO_VALID(opt) || !data || !dlen) { + ret_val = -EINVAL; + goto gtfo; + } + + so = _sockets[sockfd]; + + /* make sure sockfd refers to a valid socket */ + if(!so) { + ret_val = -EBADF; + goto gtfo; + } + + switch(opt) { + case SO_SNDBUF: + case SO_RCVBUF: + case SO_SNDLOWAT: + case SO_RCVLOWAT: + case SO_SNDTIMEO: + case SO_RCVTIMEO: + case SO_DEBUG: + case SO_REUSEADDR: + case SO_KEEPALIVE: + case SO_DONTROUTE: + case SO_BROADCAST: + case SO_USELOOPBACK: + case SO_OOBINLINE: + case SO_LINGER: + case SO_ERROR: + case SO_TYPE: + ret_val = -ENOSYS; + break; + + default: + /* *should* not be reachable */ + ret_val = -EINVAL; + break; + } + +gtfo: + return(ret_val); +} + +int sogetopt(int sockfd, int opt, void *data, size_t *dlen) +{ + return(-ENOSYS); +} diff --git a/kernel/core/socket.h b/kernel/core/socket.h index a5eed13..fb68146 100644 --- a/kernel/core/socket.h +++ b/kernel/core/socket.h @@ -24,4 +24,7 @@ int socreate(int, int, int); int soclose(int); int sofree(int); +int sosetopt(int, int, const void*, size_t); +int sogetopt(int, int, void*, size_t*); + #endif /* __SOCKET_H */ -- 2.47.3