]> git.corax.cc Git - corax/commitdiff
Add (incomplete) sosetopt() and sogetopt() functions
authorMatthias Kruk <m@m10k.eu>
Sat, 5 Oct 2019 06:31:45 +0000 (15:31 +0900)
committerMatthias Kruk <m@m10k.eu>
Sat, 5 Oct 2019 06:31:45 +0000 (15:31 +0900)
kernel/core/socket.c
kernel/core/socket.h

index 8d05050417fcc5a4948ef74dd62559f813bdff43..35157ea512996b3d731c24486fb2c09236e6f41e 100644 (file)
@@ -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);
+}
index a5eed13b52ebb474feea26021b208f97de25142c..fb681469f565d5392cdf55f882be00e67080226c 100644 (file)
@@ -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 */