g_io_add_watch, g_io_channel_read stops working after sometime.

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

g_io_add_watch, g_io_channel_read stops working after sometime.

Rehan
Hi,

 I am trying to write a program based on client-server architecture. I need only one client connection hence i am first listening to client then accept() is called. after accept() i call g_io_channel_unix_new () and then g_io_add_watch() and later in the function i use g_io_channel_read to read data from the channel.

  Everything works fine till 4-5 requests from the client. Later the server simply stops listening to client. I have tried tcpdump on server side and i do recieve the TCP packet from the client. So it means there is some bug at server side. I am not sure if i have done something wrong or some bug in core library...

I am confused as the code works for 4-5 request and then simply starts ignoring the client messages. Is g_io_add_watch ignoring the incoming signals?? thats what i can detect from my gdb tracing.... there is no invocation of my function even if i recieve a packet on server side from the client....

in summary function calls:

->socket(AF_INET,SOCK_STREAM,0)
->bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)))
->listen(sockfd,5)
->accept(sockfd, (struct sockaddr *) &cli_addr, &clilen)
->g_io_channel_unix_new (global_sock)
->g_io_add_watch(listenonsocket, G_IO_IN | G_IO_PRI,read_request, &global_sock)
->g_io_channel_read(channel,&len,sizeof(len),&bytes_read);

I hope somebody comes to my rescue its been now 3 days i am trying to solve this problem but no success...

Thanks in advance for all great coders....

Regards,
RS.
Reply | Threaded
Open this post in threaded view
|

Re: g_io_add_watch, g_io_channel_read stops working after sometime.

Tim-Philipp Müller
On Wed, 2007-04-18 at 04:30 -0700, Rehan wrote:

Hi,

The gtk-devel mailing list is mostly for development of GLib/Gtk+
itself, questions about using those libraries should be taken to
gtk-list or gtk-app-devel list.


> I am confused as the code works for 4-5 request and then simply starts
> ignoring the client messages. Is g_io_add_watch ignoring the incoming
> signals??
 ...

> in summary function calls:
>
> ->socket(AF_INET,SOCK_STREAM,0)
> ->bind(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)))
> ->listen(sockfd,5)
> ->accept(sockfd, (struct sockaddr *) &cli_addr, &clilen)
> ->g_io_channel_unix_new (global_sock)
> ->g_io_add_watch(listenonsocket, G_IO_IN | G_IO_PRI,read_request,
> &global_sock)
> ->g_io_channel_read(channel,&len,sizeof(len),&bytes_read);

- does your read_request() callback return TRUE whenever called? (or
rather: make sure it returns something in the first place)

- you should probably also watch for G_IO_HUP and G_IO_ERROR

- there are a bunch of libraries that provide higher-level abstractions
for this stuff based on GLib, such as GNet or libgnetwork (just FYI,
there's nothing wrong in principle with doing things directly).

 Cheers
  -Tim


_______________________________________________
gtk-devel-list mailing list
[hidden email]
http://mail.gnome.org/mailman/listinfo/gtk-devel-list