Let user set HCConn callback function and data.
authorThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Thu, 2 Jul 2009 17:47:56 +0000 (14:47 -0300)
committerThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Thu, 2 Jul 2009 17:47:56 +0000 (14:47 -0300)
iochannel.c
iochannel.h

index 18336a1..8005af1 100644 (file)
@@ -19,6 +19,7 @@
 
 #include "iochannel.h"
 #include <unistd.h>
+#include <fcntl.h>
 
 struct hc_server_cb
 {
@@ -107,6 +108,7 @@ HCConn *
 hc_conn_new (int fd, HCClientFunc func, gpointer data)
 {
   HCConn *conn;
+  fcntl (fd, F_SETFL, fcntl (fd, F_GETFL, 0) | O_NONBLOCK);
   conn = g_slice_new (HCConn);
   conn->channel = g_io_channel_unix_new (fd);
   conn->func = func;
@@ -119,6 +121,13 @@ hc_conn_new (int fd, HCClientFunc func, gpointer data)
   return conn;
 }
 
+void
+hc_conn_set_callback (HCConn *conn, HCClientFunc func, gpointer data)
+{
+  conn->func = func;
+  conn->data = data;
+}
+
 ssize_t
 hc_conn_read (HCConn *conn, char *buffer, size_t len)
 {
index cac301d..3fbbea7 100644 (file)
@@ -43,5 +43,6 @@ HCConn * hc_conn_new (int, HCClientFunc, gpointer);
 ssize_t hc_conn_read (HCConn *, char *, size_t);
 void hc_conn_write (HCConn *, char *, size_t);
 void hc_conn_close (HCConn *);
+void hc_conn_set_callback (HCConn *, HCClientFunc, gpointer);
 
 #endif