Re: g_io_add_watch on multiple sockets



On Fri, 2003-11-21 at 04:35, Mark Stevens wrote:
Hi,

I'm writing a UDP server which needs to listen to a number of ports that
various clients send datagrams to.  I'm trying to use g_io_add_watch()
to register a callback which gets fired whenever there is something to
read on any of the numerous ports.  So I set up a GIOChannel for each of
the ports and register it using g_io_add_watch().

The problem I've encountered is that my callback only ever gets fired
when data arrives at the *last* port that I register using
g_io_add_watch().  I know for sure that data is being sent to all of the
ports by my clients.

As an example, I've included some code which does the same thing as my
server is trying to do and which shows the problem.  

Is there something obvious I'm doing wrong?

Thanks for any help or suggestions.

Mark

You may want to take a look at libgnetwork on GNOME CVS, module
'libgnetwork', if you don't mind depending on GConf. There's a
GNetworkUdpDatagram object which handles this internally (so you can
treat the connections a objects which fire the "received" signal when
incoming data is received).

udp = g_object_new (GNETWORK_TYPE_UDP_DATAGRAM, "interface", NULL,
"port", port, NULL);
g_signal_connect (udp, "received", udp_received_cb, NULL);
/* get notification about the socket being closed & such. */
g_signal_connect (udp, "notify::status", udp_status_changed_cb, NULL);
gnetwork_datagram_open (udp);

udp2 = g_object_new (GNETWORK_TYPE_UDP_DATAGRAM, "interface", NULL,
"port", port2, NULL);
g_signal_connect (udp2, "received", udp_received_cb, NULL);
/* get notification about the socket being closed & such. */
g_signal_connect (udp2, "notify::status", udp_status_changed_cb, NULL);
gnetwork_datagram_open (udp2);

The only "extra" thing you need to remember to do is unref the objects
when you're done.

Up-to-the-build API docs are available at:
http://esco.mine.nu/gtk-doc/libgnetwork/

-- 
Peace,

    Jim Cape
    http://ignore-your.tv

    "It is literally true that, like Christianity, Socialism
     has conquered the world by defeating itself."
        -- Alexander Berkman, ABC of Anarchism

Attachment: signature.asc
Description: This is a digitally signed message part



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]