blob: 462dd5407238f3f6c2db849d2952ee6d617d733b [file] [log] [blame]
/* 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)