summaryrefslogtreecommitdiff
path: root/lib/lua
diff options
context:
space:
mode:
authorJames E. King, III <jking@apache.org>2016-11-12 15:12:33 -0500
committerJames E. King, III <jking@apache.org>2016-11-12 15:12:33 -0500
commitea5ea8b4c85ffced36a88b93b35a4671478921ab (patch)
tree4a31ad173abf5d9d03a971fee6ca2310e18fa513 /lib/lua
parentfd832242bba9d4eaba71c7c08e8eed440b106f98 (diff)
downloadthrift-ea5ea8b4c85ffced36a88b93b35a4671478921ab.tar.gz
THRIFT-3947 use sockaddr_storage with getsockname for future transport compatibility (ipv6)
Client: Lua This closes #1127
Diffstat (limited to 'lib/lua')
-rw-r--r--lib/lua/src/usocket.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/lib/lua/src/usocket.c b/lib/lua/src/usocket.c
index d97112cfb..864fa3654 100644
--- a/lib/lua/src/usocket.c
+++ b/lib/lua/src/usocket.c
@@ -131,20 +131,27 @@ T_ERRCODE socket_bind(p_socket sock, p_sa addr, int addr_len) {
}
T_ERRCODE socket_get_info(p_socket sock, short *port, char *buf, size_t len) {
- struct sockaddr_in sa;
+ struct sockaddr_storage sa;
memset(&sa, 0, sizeof(sa));
socklen_t addrlen = sizeof(sa);
int rc = getsockname(*sock, (struct sockaddr*)&sa, &addrlen);
if (!rc) {
- char *addr = inet_ntoa(sa.sin_addr);
- *port = ntohs(sa.sin_port);
- if (strlen(addr) < len) {
- len = strlen(addr);
+ if (sa.ss_family == AF_INET6) {
+ struct sockaddr_in6* sin = (struct sockaddr_in6*)(&sa);
+ if (!inet_ntop(AF_INET6, &sin->sin6_addr, buf, len)) {
+ return errno;
+ }
+ *port = ntohs(sin->sin6_port);
+ } else {
+ struct sockaddr_in* sin = (struct sockaddr_in*)(&sa);
+ if (!inet_ntop(AF_INET, &sin->sin_addr, buf, len)) {
+ return errno;
+ }
+ *port = ntohs(sin->sin_port);
}
- memcpy(buf, addr, len);
return SUCCESS;
}
- return rc;
+ return errno;
}
////////////////////////////////////////////////////////////////////////////////