Wireshark mailing list archives

Re: Portable sockets


From: Guy Harris <guy () alum mit edu>
Date: Wed, 10 Feb 2016 10:10:45 -0800

On Feb 10, 2016, at 7:51 AM, Dario Lombardo <dario.lombardo.ml () gmail com> wrote:

I'm working on a new extcap that listens on a port for incoming packets produced by capture devices. I have to create 
a small, standard udp server. I was wandering which functions I am supposed to use to be portable. Are POSIX sockets 
ok on Windows

Sort of.  There's Winsock:

        https://msdn.microsoft.com/en-us/library/windows/desktop/ms740673(v=vs.85).aspx

but there might have to be some "#ifdef _WIN32/#else/#endif" in your code to handle, for example, socket descriptors 
being regular file descriptors in UN*X but being of type "SOCKET" in Winsock.

(I suppose they're fine on OS X)?

Given that

        1) OS X is a Single UNIX Specification-compliant OS (i.e., compliant with the current version of POSIX);

        2) OS X's socket code is a derivative of the 4.4-Lite socket code, which is a descendant of the original BSD 
socket code;

sockets work the same as on other BSD-flavored UN*Xes. (That means some things might be a little different than on, 
say, Linux, or Solaris, or..., in ways that aren't specified by the Single UNIX Specification - Linux's select(), for 
example, modifies the timeout argument passed to it, which is allowed, but not required, by the SUS, but other UN*X's 
select() generally doesn't. However, as long as you carefully follow the SUS, the code should work on current versions 
of SUS-compliant UNIXes and probably also work on *BSD and Linux.  For example, for select(), neither depend on the 
timeout being modified nor depend on it *not* being modified; set the timeout variable before each select() call, 
rather than initializing it once and using that value in a loop, and don't use the value of the variable after select() 
returns.)

Or should I go with something like GSocket?

https://developer.gnome.org/gio/stable/GSocket.html

If you only expect the server to run on machines with Wireshark, that's probably good enough; they seem to indicate 
that it papers over the differences between UN*X sockets and Winsock, and requiring GLib isn't a problem if you only 
expect it to be run on machines with Wireshark or TShark installed, given that they require GLib.

The only reason *not* to go with GSocket might be if you don't want to require GLib on the target platform.
___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <wireshark-dev () wireshark org>
Archives:    https://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev
             mailto:wireshark-dev-request () wireshark org?subject=unsubscribe


Current thread: