summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndreas Schneider <asn@cryptomilk.org>2013-02-11 10:46:57 +0100
committerAndreas Schneider <asn@cryptomilk.org>2013-02-11 10:46:57 +0100
commitad5022072e762ac44d0fe19b872fe30808a32950 (patch)
treef8ef2cab6d1290b378b05d5e1511fe1d0f7bf15a /src
parent859dc3f2ad12d227cf94393bff698a287a067565 (diff)
downloadsocket_wrapper-ad5022072e762ac44d0fe19b872fe30808a32950.tar.gz
socket_wrapper-ad5022072e762ac44d0fe19b872fe30808a32950.tar.xz
socket_wrapper-ad5022072e762ac44d0fe19b872fe30808a32950.zip
Add getsockopt() wrapper.
Diffstat (limited to 'src')
-rw-r--r--src/socket_wrapper.c25
1 files changed, 22 insertions, 3 deletions
diff --git a/src/socket_wrapper.c b/src/socket_wrapper.c
index 17fbe3a..75f9d34 100644
--- a/src/socket_wrapper.c
+++ b/src/socket_wrapper.c
@@ -240,6 +240,25 @@ static int real_getsockname(int sockfd,
return libc_getsockname(sockfd, addr, addrlen);
}
+static int (*libc_getsockopt)(int sockfd,
+ int level,
+ int optname,
+ void *optval,
+ socklen_t *optlen);
+
+static int real_getsockopt(int sockfd,
+ int level,
+ int optname,
+ void *optval,
+ socklen_t *optlen)
+{
+ if (libc_getsockopt == NULL) {
+ *(void **)(&libc_getsockopt) = libc_dlsym("getsockopt");
+ }
+
+ return libc_getsockopt(sockfd, level, optname, optval, optlen);
+}
+
static int (*libc_listen)(int sockfd, int backlog);
static int real_listen(int sockfd, int backlog)
@@ -1996,8 +2015,7 @@ int getsockname(int s, struct sockaddr *name, socklen_t *addrlen)
return 0;
}
-#if 0
-_PUBLIC_ int swrap_getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen)
+int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen)
{
struct socket_info *si = find_socket_info(s);
@@ -2007,12 +2025,13 @@ _PUBLIC_ int swrap_getsockopt(int s, int level, int optname, void *optval, sockl
if (level == SOL_SOCKET) {
return real_getsockopt(s, level, optname, optval, optlen);
- }
+ }
errno = ENOPROTOOPT;
return -1;
}
+#if 0
_PUBLIC_ int swrap_setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen)
{
struct socket_info *si = find_socket_info(s);