Index: uspace/srv/net/tl/tcp/ucall.c
===================================================================
--- uspace/srv/net/tl/tcp/ucall.c	(revision 0edaf0f65b8b68a7f2f5e4adf75b32af8299101d)
+++ uspace/srv/net/tl/tcp/ucall.c	(revision e86b8f0a4a36b968e6ed12053ec2fbf42b8b5f9e)
@@ -53,4 +53,5 @@
  * @param fsock		Foreign socket
  * @param acpass	Active/passive
+ * @param oflags	Open flags
  * @param conn		Connection
  *
@@ -65,11 +66,11 @@
  */
 tcp_error_t tcp_uc_open(tcp_sock_t *lsock, tcp_sock_t *fsock, acpass_t acpass,
-    tcp_conn_t **conn)
+    tcp_open_flags_t oflags, tcp_conn_t **conn)
 {
 	tcp_conn_t *nconn;
 
-	log_msg(LVL_DEBUG, "tcp_uc_open(%p, %p, %s, %p)",
+	log_msg(LVL_DEBUG, "tcp_uc_open(%p, %p, %s, %s, %p)",
 	    lsock, fsock, acpass == ap_active ? "active" : "passive",
-	    conn);
+	    oflags == tcp_open_nonblock ? "nonblock" : "none", conn);
 
 	nconn = tcp_conn_new(lsock, fsock);
@@ -79,4 +80,9 @@
 		/* Synchronize (initiate) connection */
 		tcp_conn_sync(nconn);
+	}
+
+	if (oflags == tcp_open_nonblock) {
+		*conn = nconn;
+		return TCP_EOK;
 	}
 
@@ -101,4 +107,5 @@
 
 	*conn = nconn;
+	log_msg(LVL_DEBUG, "tcp_uc_open -> %p", nconn);
 	return TCP_EOK;
 }
@@ -258,4 +265,5 @@
 {
 	log_msg(LVL_DEBUG, "tcp_uc_status()");
+	cstatus->cstate = conn->cstate;
 }
 
@@ -270,4 +278,13 @@
 	log_msg(LVL_DEBUG, "tcp_uc_delete()");
 	tcp_conn_delete(conn);
+}
+
+void tcp_uc_set_cstate_cb(tcp_conn_t *conn, tcp_cstate_cb_t cb, void *arg)
+{
+	log_msg(LVL_DEBUG, "tcp_uc_set_ctate_cb(%p, %p, %p)",
+	    conn, cb, arg);
+
+	conn->cstate_cb = cb;
+	conn->cstate_cb_arg = arg;
 }
 
