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);
+}
int soclose(int);
int sofree(int);
+int sosetopt(int, int, const void*, size_t);
+int sogetopt(int, int, void*, size_t*);
+
#endif /* __SOCKET_H */