From 2571ceeca8a0ffe2ca84653448678c003cd432ef Mon Sep 17 00:00:00 2001 From: "sgjesse@google.com" Date: Mon, 21 May 2012 13:31:01 +0000 Subject: [PATCH] Make standalone Dart VM run on Windows XP Use the function WSAAddressToString for converting an IP address to a string instead of inet_ntop. WSAAddressToString is available on Windows XP. R=ager@google.com BUG=dart:2559 TEST=tests\standalone\io\socket_info_test.dart Review URL: https://chromiumcodereview.appspot.com//10409051 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@7797 260f80e4-7a28-3924-810f-c04153c831b5 --- runtime/bin/socket_win.cc | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/runtime/bin/socket_win.cc b/runtime/bin/socket_win.cc index d581b8b07e8..6dabff24ef3 100644 --- a/runtime/bin/socket_win.cc +++ b/runtime/bin/socket_win.cc @@ -61,14 +61,20 @@ bool Socket::GetRemotePeer(intptr_t fd, char *host, intptr_t *port) { fprintf(stderr, "Error getpeername: %s\n", strerror(errno)); return false; } - if (inet_ntop(socket_address.sin_family, - reinterpret_cast(&socket_address.sin_addr), - host, - INET_ADDRSTRLEN) == NULL) { - fprintf(stderr, "Error inet_ntop: %s\n", strerror(errno)); + *port = ntohs(socket_address.sin_port); + // Clear the port before calling WSAAddressToString as WSAAddressToString + // includes the port in the formatted string. + socket_address.sin_port = 0; + DWORD len = INET_ADDRSTRLEN; + int err = WSAAddressToString(reinterpret_cast(&socket_address), + sizeof(socket_address), + NULL, + host, + &len); + if (err != 0) { + fprintf(stderr, "Error WSAAddressToString: %d\n", WSAGetLastError()); return false; } - *port = ntohs(socket_address.sin_port); return true; }