This is one of the best and most comprehensive explanations for Windows
sockets I read so far.

@Stig - You could take a look at extcap_spawn.c, there you will find code,
also in extcap.c for implementing waiting on that thing, Windows likes to
call a "Named Pipe"

cheers,
Roland

On Tue, Jun 27, 2017 at 10:59 PM, Guy Harris <g...@alum.mit.edu> wrote:

> (Sending to a broader list, in case anybody has answers.)
>
> On Jun 26, 2017, at 10:53 AM, Stig Bjørlykke <s...@bjorlykke.org> wrote:
>
> > The extcap interface toolbar is not supported on Windows yet,
> > basically because I don't know how the pipe handling is done when
> > using select(),
>
> Sadly, Windows' handling of "wait for something to happen" is a bit
> clumsier than UN*X's.
>
> UN*Xes have select() and poll(), with the possible addition of some other
> similar mechanisms such as Linux's epoll() or *BSD/Darwin's kqueues.  You
> can wait for a device, a socket, or a pipe with them.  (Sadly, in the
> general case, you can't wait for a process or thread to terminate with
> select(), although you can do it with kqueues on at least some platforms.
> I'm not sure whether the inability to wait for a mutex to unlock or a
> condition variable to be signaled is a significant issue or not.)
>
> Windows has select()
>
>         https://msdn.microsoft.com/en-us/library/windows/desktop/
> ms740141(v=vs.85).aspx
>
> which works on sockets, sockets, sockets, and sockets, and
> WaitForMultipleObjects():
>
>         https://msdn.microsoft.com/en-us/library/windows/desktop/
> ms687025(v=vs.85).aspx
>
> which works on a number of things - only one of which is the equivalent of
> a readable file descriptor, namely "console input".  It doesn't appear that
> you can use a HANDLE for a pipe (named or unnamed), and, while Microsoft
> seem to indicate that you can do regular ReadFile()/WriteFile() I/O on a
> socket:
>
>         https://msdn.microsoft.com/en-us/library/windows/desktop/
> ms740522(v=vs.85).aspx
>
> they don't indicate what the connection is between a socket descriptor and
> a socket handle (they have the same size, 32 bits in Win32 and 64 bits in
> Win64, but are SOCKET values usable as HANDLEs, or is there a "get a handle
> for this socket descriptor" call?) - and even if you get a HANDLE it
> probably works no better with WaitForMultipleEvents() than do pipe HANDLEs.
>
> For named pipes, you can use "overlapped mode" for asynchronous I/O:
>
>         https://msdn.microsoft.com/en-us/library/aa365788(VS.85).aspx
>
> and can create an event handle that's signaled when a read or write
> completes, and hand *that* to WaitForMultipleObjects().  This appears, from
> some Web searching, to be the closest thing to waiting for a read to be
> possible, but it would be done differently - instead of
>
>         select();
>         if (pipe is readable) {
>                 read into buffer;
>                 process that data if we can;
>         }
>
> it'd be more like
>
>         start an asynchronous read into the buffer;
>         WaitForMultipleObjects();
>         if (event for that pipe was triggered) {
>                 process the data that was read if we can;
>         }
>
> Anonymous pipes are just named pipes with created unique names:
>
>         https://msdn.microsoft.com/en-us/library/aa365141(v=vs.85).aspx
>
> but, as that page says, "Asynchronous (overlapped) read and write
> operations are not supported by anonymous pipes.".
>
> For sockets, it appears you can do an operation that's similar to
> select(), but, instead of waiting, returns an event handle:
>
>         https://msdn.microsoft.com/en-us/library/windows/desktop/
> ms741576(v=vs.85).aspx
>
> However, those event handles may, or may not, be like regular Windows
> event handles; they are documented as working with
> WSAWaitForMultipleEvents() rather than with WaitForMultipleObjects():
>
>         https://msdn.microsoft.com/en-us/library/windows/desktop/
> ms742219(v=vs.85).aspx
>
> and they also don't indicate whether you can use regular event objects
> with WSAWaitForMultipleEvents().
>
> Furthermore, GUI applications should probably use
> MsgWaitForMultipleObjects().  I think that's what's used in the GUI event
> loops of GTK+ and Qt on Windows.
>
> So doing the equivalent of select()/poll() on Windows appears to be a
> challenge.
>
> If anybody has more information than what I found, that'd be helpful.
> ____________________________________________________________
> _______________
> Sent via:    Wireshark-dev mailing list <wireshark-dev@wireshark.org>
> Archives:    https://www.wireshark.org/lists/wireshark-dev
> Unsubscribe: https://www.wireshark.org/mailman/options/wireshark-dev
>              mailto:wireshark-dev-requ...@wireshark.org?subject=
> unsubscribe
___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <wireshark-dev@wireshark.org>
Archives:    https://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://www.wireshark.org/mailman/options/wireshark-dev
             mailto:wireshark-dev-requ...@wireshark.org?subject=unsubscribe

Reply via email to