| /* Copyright (c) 2015 Google, Inc. | 
 |  * Barret Rhoden <brho@cs.berkeley.edu> | 
 |  * See LICENSE for details. */ | 
 |  | 
 | #include <errno.h> | 
 | #include <sys/socket.h> | 
 |  | 
 | #include <sys/plan9_helpers.h> | 
 |  | 
 | static int sol_socket_sso(Rock *r, int optname, void *optval, socklen_t optlen) | 
 | { | 
 | 	switch (optname) { | 
 | 	#if 0 | 
 | 	/* We don't support setting any options yet */ | 
 | 	case (SO_FOO): | 
 | 		if (optlen < foo_len) { | 
 | 			__set_errno(EINVAL); | 
 | 			return -1; | 
 | 		} | 
 | 		r->foo = *optval; | 
 | 		break; | 
 | 	#endif | 
 | 	default: | 
 | 		__set_errno(ENOPROTOOPT); | 
 | 		return -1; | 
 | 	}; | 
 | 	return 0; | 
 | } | 
 |  | 
 | int __setsockopt(int sockfd, int level, int optname, const __ptr_t __optval, | 
 |                  socklen_t optlen) | 
 | { | 
 | 	Rock *r = _sock_findrock(sockfd, 0); | 
 | 	void *optval = (void*)__optval; | 
 | 	if (!r) { | 
 | 		/* could be EBADF too, we can't tell */ | 
 | 		__set_errno(ENOTSOCK); | 
 | 		return -1; | 
 | 	} | 
 | 	switch (level) { | 
 | 	case (SOL_SOCKET): | 
 | 		return sol_socket_sso(r, optname, optval, optlen); | 
 | 	default: | 
 | 		__set_errno(ENOPROTOOPT); | 
 | 		return -1; | 
 | 	}; | 
 | } | 
 | weak_alias (__setsockopt, setsockopt) |