summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRalf Habacker <ralf.habacker@freenet.de>2015-02-04 14:56:17 +0100
committerRalf Habacker <ralf.habacker@freenet.de>2015-02-04 19:30:38 +0100
commite6bece44989f90eb55cbeface2845e1ea0ebc26a (patch)
treed7c62de61dd8fb5f433c6daee5c27a0c37f65055
parent8628ed61323167579e5f23395d83011352803c8e (diff)
downloaddbus-e6bece44989f90eb55cbeface2845e1ea0ebc26a.tar.gz
_dbus_listen_tcp_socket: Keep windows code to fetch port from tcp listening socket in sync with unix.
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=87999 Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
-rw-r--r--dbus/dbus-sysdeps-win.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/dbus/dbus-sysdeps-win.c b/dbus/dbus-sysdeps-win.c
index 68fa72b0..dbd9043d 100644
--- a/dbus/dbus-sysdeps-win.c
+++ b/dbus/dbus-sysdeps-win.c
@@ -1763,9 +1763,12 @@ _dbus_listen_tcp_socket (const char *host,
{
mysockaddr_gen addr;
socklen_t addrlen = sizeof(addr);
- char portbuf[10];
+ char portbuf[NI_MAXSERV];
- if (getsockname(fd, &addr.Address, &addrlen) == SOCKET_ERROR)
+ if (getsockname(fd, &addr.Address, &addrlen) == SOCKET_ERROR ||
+ (res = getnameinfo (&addr.Address, addrlen, NULL, 0,
+ portbuf, sizeof(portbuf),
+ NI_NUMERICSERV)) != 0)
{
DBUS_SOCKET_SET_ERRNO ();
dbus_set_error (error, _dbus_error_from_errno (errno),
@@ -1773,10 +1776,6 @@ _dbus_listen_tcp_socket (const char *host,
host ? host : "*", port, _dbus_strerror_from_errno());
goto failed;
}
- if (addr.AddressIn.sin_family = AF_INET)
- snprintf( portbuf, sizeof( portbuf ) - 1, "%d", ntohs(addr.AddressIn.sin_port) );
- else
- snprintf( portbuf, sizeof( portbuf ) - 1, "%d", ntohs(addr.AddressIn6.sin6_port) );
if (!_dbus_string_append(retport, portbuf))
{
dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);