summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Schneider <asn@cryptomilk.org>2013-02-08 15:52:49 +0100
committerAndreas Schneider <asn@cryptomilk.org>2013-02-08 15:52:49 +0100
commitac7b6a6b1be4a30a953718c5397c8cdce43d1d55 (patch)
treeb6dc4fc0abafe21b78f4e690fd080b2a97fa200b
parent72fba61eb487330904895a2711c23f7909c4f233 (diff)
downloadsocket_wrapper-ac7b6a6b1be4a30a953718c5397c8cdce43d1d55.tar.gz
socket_wrapper-ac7b6a6b1be4a30a953718c5397c8cdce43d1d55.tar.xz
socket_wrapper-ac7b6a6b1be4a30a953718c5397c8cdce43d1d55.zip
Add getpeername() wrapper.
-rw-r--r--src/socket_wrapper.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/socket_wrapper.c b/src/socket_wrapper.c
index e0913b3..b53fe45 100644
--- a/src/socket_wrapper.c
+++ b/src/socket_wrapper.c
@@ -210,6 +210,21 @@ static int real_connect(int sockfd,
return libc_connect(sockfd, addr, addrlen);
}
+static int (*libc_getpeername)(int sockfd,
+ struct sockaddr *addr,
+ socklen_t *addrlen);
+
+static int real_getpeername(int sockfd,
+ struct sockaddr *addr,
+ socklen_t *addrlen)
+{
+ if (libc_getpeername == NULL) {
+ *(void **)(&libc_getpeername) = libc_dlsym("getpeername");
+ }
+
+ return libc_getpeername(sockfd, addr, addrlen);
+}
+
static int (*libc_getsockname)(int sockfd,
struct sockaddr *addr,
socklen_t *addrlen);
@@ -1939,8 +1954,7 @@ int listen(int s, int backlog)
return ret;
}
-#if 0
-_PUBLIC_ int swrap_getpeername(int s, struct sockaddr *name, socklen_t *addrlen)
+int getpeername(int s, struct sockaddr *name, socklen_t *addrlen)
{
struct socket_info *si = find_socket_info(s);
@@ -1960,6 +1974,7 @@ _PUBLIC_ int swrap_getpeername(int s, struct sockaddr *name, socklen_t *addrlen)
return 0;
}
+#if 0
_PUBLIC_ int swrap_getsockname(int s, struct sockaddr *name, socklen_t *addrlen)
{
struct socket_info *si = find_socket_info(s);