Let user set HCConn callback function and data.
[cascardo/rnetproxy.git] / iochannel.c
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)
 {