Clean up some UN*X-vs-Windows socket issues.
authorGuy Harris <guy@alum.mit.edu>
Thu, 26 Jan 2017 06:20:07 +0000 (22:20 -0800)
committerGuy Harris <guy@alum.mit.edu>
Thu, 26 Jan 2017 07:00:06 +0000 (07:00 +0000)
Have a wsutil/socket.h file, for inclusion by everything that uses
sockets, that contains the UN*X-vs-Windows #includes and #defines to
hide some UN*X-sockets vs. Winsock API differences.  That stuff mostly
comes from from extcap/extcap-base.h; have that file just include
wsutil/socket.h rather than defining that stuff itself.

Include it in sharkd_daemon.c.  Use socklen_t for the size of things to
pass to bind() as the last argument; wsutil/socket.h defines it as int
on Windows.

Ignore sharkd in Git.

Change-Id: I3f2171b7aa613717f52305f62bfd7d43e0172dc6
Reviewed-on: https://code.wireshark.org/review/19796
Petri-Dish: Guy Harris <guy@alum.mit.edu>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Guy Harris <guy@alum.mit.edu>
.gitignore
extcap/extcap-base.h
sharkd_daemon.c
wsutil/Makefile.am
wsutil/socket.h [new file with mode: 0644]

index 069b9d9a2cb3c7bf3c5ab8ba1f6edc33aa982558..1c319508d759ca9bb084eba5f8d177922dd24daf 100644 (file)
@@ -105,6 +105,7 @@ randpktdump
 rawshark
 reordercap
 reassemble_test
+sharkd
 sshdump
 stamp-h1
 text2pcap
index 36348f8e66a1fd5a9be77cfddbda7dffa5460a06..e8fc2292168e52c4f97f78d2278b0b463413fefc 100644 (file)
        #include <io.h>
 #endif
 
-#if defined(_WIN32) && !defined(__CYGWIN__)
-       #ifdef HAVE_WINDOWS_H
-               #include <windows.h>
-       #endif
-
-       #include <ws2tcpip.h>
-
-       #ifdef HAVE_WINSOCK2_H
-               #include <winsock2.h>
-       #endif
-
-       #include <process.h>
-
-       #define socket_handle_t SOCKET
-#else
-       /*
-        * UN*X, or Windows pretending to be UN*X with the aid of Cygwin.
-        */
-       #define closesocket(socket)     close(socket)
-       #define socket_handle_t         int
-       #define INVALID_SOCKET          (-1)
-       #define SOCKET_ERROR            (-1)
-#endif
-
-#ifdef HAVE_ARPA_INET_H
-       #include <arpa/inet.h>
-#endif
+#include <wsutil/socket.h>
 
 #define EXTCAP_BASE_OPTIONS_ENUM \
        EXTCAP_OPT_LIST_INTERFACES, \
index 408c6dbd8d5bd59783b8fcf098e6465f0a27ea64..ca176ca09733fe3727c48dd05a18700d46f5e267 100644 (file)
@@ -35,9 +35,7 @@
 #include <unistd.h>
 #endif
 
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
+#include <wsutil/socket.h>
 
 #ifdef HAVE_NETINET_IN_H
 #include <netinet/in.h>
 #include <netinet/tcp.h>
 #endif
 
-/*
-#if defined(_WIN32)
-       #ifdef HAVE_WINDOWS_H
-               #include <windows.h>
-       #endif
-
-       #include <ws2tcpip.h>
-
-       #ifdef HAVE_WINSOCK2_H
-               #include <winsock2.h>
-       #endif
-#endif
-*/
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-
 #include <wsutil/strtoi.h>
 
 #include "sharkd.h"
@@ -80,7 +61,7 @@ socket_init(char *path)
        if (!strncmp(path, "unix:", 5))
        {
                struct sockaddr_un s_un;
-               size_t s_un_len;
+               socklen_t s_un_len;
 
                path += 5;
 
@@ -95,7 +76,7 @@ socket_init(char *path)
                s_un.sun_family = AF_UNIX;
                g_strlcpy(s_un.sun_path, path, sizeof(s_un.sun_path));
 
-               s_un_len = offsetof(struct sockaddr_un, sun_path) + strlen(s_un.sun_path);
+               s_un_len = (socklen_t)(offsetof(struct sockaddr_un, sun_path) + strlen(s_un.sun_path));
 
                if (s_un.sun_path[0] == '@')
                        s_un.sun_path[0] = '\0';
index a8642d4e10a3b6ad0d02ecdf516eda343aa4ceb5..76b968b66b5860fba76f07ce47f071a31cd9d1a3 100644 (file)
@@ -83,6 +83,7 @@ libwsutil_nonrepl_INCLUDES = \
        sha2.h                  \
        sign_ext.h              \
        sober128.h              \
+       socket.h                \
        str_util.h              \
        strnatcmp.h             \
        strtoi.h                \
diff --git a/wsutil/socket.h b/wsutil/socket.h
new file mode 100644 (file)
index 0000000..a26eb35
--- /dev/null
@@ -0,0 +1,81 @@
+/* socket.h
+ * Socket wrappers
+ *
+ * Copyright 2016, Dario Lombardo
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+#ifndef __SOCKET_H__
+#define __SOCKET_H__
+
+#include "config.h"
+
+#if defined(_WIN32) && !defined(__CYGWIN__)
+       #ifdef HAVE_WINDOWS_H
+               #include <windows.h>
+       #endif
+
+       #include <ws2tcpip.h>
+
+       #ifdef HAVE_WINSOCK2_H
+               #include <winsock2.h>
+       #endif
+
+       #include <process.h>
+
+       #define socket_handle_t SOCKET
+       #define socklen_t int
+#else
+       /*
+        * UN*X, or Windows pretending to be UN*X with the aid of Cygwin.
+        */
+       #ifdef HAVE_UNISTD_H
+               /*
+                * For close().
+                */
+               #include <unistd.h>
+       #endif
+       #ifdef HAVE_SYS_SOCKET_H
+               #include <sys/socket.h>
+       #endif
+
+       #define closesocket(socket)     close(socket)
+       #define socket_handle_t         int
+       #define INVALID_SOCKET          (-1)
+       #define SOCKET_ERROR            (-1)
+#endif
+
+#ifdef HAVE_ARPA_INET_H
+       #include <arpa/inet.h>
+#endif
+
+#endif /* __SOCKET_H__ */
+
+/*
+ * Editor modelines  -  https://www.wireshark.org/tools/modelines.html
+ *
+ * Local variables:
+ * c-basic-offset: 8
+ * tab-width: 8
+ * indent-tabs-mode: t
+ * End:
+ *
+ * vi: set shiftwidth=8 tabstop=8 noexpandtab:
+ * :indentSize=8:tabSize=8:noTabs=false:
+ */