summaryrefslogtreecommitdiff
path: root/extcap
diff options
context:
space:
mode:
authorDario Lombardo <lomato@gmail.com>2017-03-01 11:32:24 +0100
committerAlexis La Goutte <alexis.lagoutte@gmail.com>2017-03-01 19:47:09 +0000
commit929e0e897cc857dc11cffc612c4eb8030cbb0e2d (patch)
tree1c37fa4b12d2038dbd387caba4f34a64a308f6c9 /extcap
parent9157e4035d962fc87ad4fbf8f8299c1e1c0677bd (diff)
downloadwireshark-929e0e897cc857dc11cffc612c4eb8030cbb0e2d.tar.gz
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.c21
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;
}