Repository: thrift Updated Branches: refs/heads/master fd832242b -> ea5ea8b4c
THRIFT-3947 use sockaddr_storage with getsockname for future transport compatibility (ipv6) Client: Lua This closes #1127 Project: http://git-wip-us.apache.org/repos/asf/thrift/repo Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/ea5ea8b4 Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/ea5ea8b4 Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/ea5ea8b4 Branch: refs/heads/master Commit: ea5ea8b4c85ffced36a88b93b35a4671478921ab Parents: fd83224 Author: James E. King, III <jk...@apache.org> Authored: Sat Nov 12 15:12:33 2016 -0500 Committer: James E. King, III <jk...@apache.org> Committed: Sat Nov 12 15:12:33 2016 -0500 ---------------------------------------------------------------------- lib/lua/src/usocket.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/thrift/blob/ea5ea8b4/lib/lua/src/usocket.c ---------------------------------------------------------------------- diff --git a/lib/lua/src/usocket.c b/lib/lua/src/usocket.c index d97112c..864fa36 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; } ////////////////////////////////////////////////////////////////////////////////