Hi,

I have an application using (tcp) GSockets objects. The thing I am
trying to figure out is how to be notified when the peer closes the
socket. My idea so far has been to use g_socket_create_source () and set
G_IO_HUP as a condition.

The problem is that it does not always work.

Let's call:
- "server-side" GSocket those associated with a GSocketConnection
obtained in the callback of the "incoming" signal of a GSocketService
object
- and "client side" GSocket those obtained after
g_socket_client_connect_to_host_async()/g_socket_client_connect_to_host_finish()
 calls.

For "server-side" GSocket I do get the G_IO_HUP condition in the
callback of g_socket_create_source(); I don't with "client" GSocket, I
do seem to receive a G_IO_IN but when I try to read from it, it does not
give an error but returns a 0 byte read.

Now I try to make sense of the API documentation for
g_socket_create_source () which says:
"It is meaningless to specify G_IO_ERR or G_IO_HUP in condition; these
conditions will always be reported output if they are true."

I don't really understand the statement though it seems to imply that
G_IO_HUP will not trigger the callback and will be ignored. If that so
how can you be notified when a socket is closed by the peer?

Another function is unclear to me: g_socket_is_connected(). When I call
this function:
- if it is a "client side" GSocket then it always return FALSE
- if it is a "server side" GSocket it always return TRUE.

Am I missing something? Could it be the symptom of a problem deep in my
code (I cannot really show it here as it is really long)?

Thanks for any help,

Philippe Rouquier
_______________________________________________
gtk-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gtk-list

Reply via email to