GSocket questions


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

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