On 7/27/2017 2:56 PM, LRN wrote: > On 7/27/2017 2:06 PM, Faik wrote: > >> As you might guess, in arv_gv_discover_socket_list_new() function, GPollFDs >> are created and in _discover() function, a broadcast message is sent and then >> polled for reply. but no luck, still in _discover(), it time outs. By the >> way, in Linux, the same application works smootly. >> I also checked the discovery packet was actually emitted, and I saw a camera >> discovery ack packet coming to my network adapter via WireShark. > Portable I/O is tricky. If i were in your place, i would write the simplest > possible code that does this thing (creates a socket, sends a broadcast > message, then waits for a reply) using W32 socket API only. Once *that* works, > figure out what glib is doing differently. Since you're providing the socket > object to glib, at least socket creation part is already in your hands. IIRC, > glib calls WSACreateEvent() to create an event handle, then binds it to the > socket using WSAEventSelect(), then just waits on the event handle using > conventional WaitForMultipleObjects...() (in your case WaitForSingleObject > would probably be enough). Once it indicates that the event is set, glib calls > WSAEnumNetworkEvents () to see which socket events happened. >
After trying this myself (for unrelated reasons), i found that *only* giochannel GSource does WSAEventSelect() on a socket event (in g_io_win32_prepare()) to bind it to an event handle, which can then be polled. If you are not using a main loop (and GSource), then this doesn't happen, and the events you feed to g_poll() are completely inert. Thus, apart from creating sockets yourself, you should also call call WSAEventSelect(). It might be possible to offload this to glib by pretending to be a main loop, but driving stuff manually, but i haven't checked that yet. -- O< ascii ribbon - stop html email! - http://arc.pasp.de/
0x6759BA74.asc
Description: application/pgp-keys
signature.asc
Description: OpenPGP digital signature
_______________________________________________ gtk-devel-list mailing list gtk-devel-list@gnome.org https://mail.gnome.org/mailman/listinfo/gtk-devel-list