+ HCEvent event;
+ int fd = g_io_channel_unix_get_fd (channel);
+ char buffer;
+ int r;
+ if (cond & G_IO_IN)
+ {
+ event = HC_EVENT_READ;
+ r = recv (fd, &buffer, 1, MSG_PEEK);
+ if (r == 0)
+ {
+ event = HC_EVENT_CLOSE;
+ }
+ else if (r == -1)
+ {
+ /* FIXME: create HC_EVENT_ERROR */
+ event = HC_EVENT_CLOSE;
+ }
+ }
+ else if (cond & G_IO_HUP)
+ {
+ event = HC_EVENT_CLOSE;
+ }
+ else if (cond & G_IO_ERR)
+ {
+ /* FIXME: create HC_EVENT_ERROR */
+ event = HC_EVENT_CLOSE;
+ }
+ else
+ {
+ /* TODO: handle other conditions and create error event */
+ g_warning ("Received an unexpected IO condition.");
+ }