diff options
author | Dario Lombardo <lomato@gmail.com> | 2017-03-01 11:32:24 +0100 |
---|---|---|
committer | Alexis La Goutte <alexis.lagoutte@gmail.com> | 2017-03-01 19:47:09 +0000 |
commit | 929e0e897cc857dc11cffc612c4eb8030cbb0e2d (patch) | |
tree | 1c37fa4b12d2038dbd387caba4f34a64a308f6c9 /extcap | |
parent | 9157e4035d962fc87ad4fbf8f8299c1e1c0677bd (diff) |
udpdump: fix recvfrom error on windows.
Change-Id: Ia88d00593163b1c1e9a0e120aeff5e36f0135474
Reviewed-on: https://code.wireshark.org/review/20319
Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Michael Mann <mmann78@netscape.net>
Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
Diffstat (limited to 'extcap')
-rw-r--r-- | extcap/udpdump.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/extcap/udpdump.c b/extcap/udpdump.c index 26451d0302..360d365d19 100644 --- a/extcap/udpdump.c +++ b/extcap/udpdump.c @@ -123,7 +123,9 @@ static int setup_listener(const guint16 port, socket_handle_t* sock) { int optval; struct sockaddr_in serveraddr; +#ifndef _WIN32 struct timeval timeout = { 1, 0 }; +#endif *sock = socket(AF_INET, SOCK_DGRAM, 0); @@ -138,10 +140,12 @@ static int setup_listener(const guint16 port, socket_handle_t* sock) goto cleanup_setup_listener; } +#ifndef _WIN32 if (setsockopt (*sock, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, (socklen_t)sizeof(timeout)) < 0) { g_warning("Can't set socket option SO_RCVTIMEO: %s", strerror(errno)); goto cleanup_setup_listener; } +#endif memset(&serveraddr, 0x0, sizeof(serveraddr)); serveraddr.sin_family = AF_INET; @@ -298,7 +302,7 @@ static int dump_packet(const char* proto_name, const guint16 listenport, const c static void run_listener(const char* fifo, const guint16 port, const char* proto_name) { struct sockaddr_in clientaddr; - int clientlen = 0; + int clientlen = sizeof(clientaddr); socket_handle_t sock; char buf[PKT_BUF_SIZE]; ssize_t buflen; @@ -330,7 +334,20 @@ static void run_listener(const char* fifo, const guint16 port, const char* proto case EINTR: break; default: - g_warning("Error in recvfrom: %s %d", strerror(errno), errno); +#ifdef _WIN32 + { + wchar_t *errmsg = NULL; + int err = WSAGetLastError(); + FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, err, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPWSTR)&errmsg, 0, NULL); + g_warning("Error in recvfrom: %S (err=%d)", errmsg, err); + LocalFree(errmsg); + } +#else + g_warning("Error in recvfrom: %s (errno=%d)", strerror(errno), errno); +#endif run_loop = FALSE; break; } |