Index: uspace/srv/net/tcp/ucall.c
===================================================================
--- uspace/srv/net/tcp/ucall.c	(revision c0f34601ec08693b7f731529896e78b6c700bc00)
+++ uspace/srv/net/tcp/ucall.c	(revision 0c2d9bb57bc590e00bd17e5f7cf0937be160cca7)
@@ -83,4 +83,5 @@
 
 	if (oflags == tcp_open_nonblock) {
+		log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_uc_open -> %p", nconn);
 		*conn = nconn;
 		return TCP_EOK;
@@ -234,18 +235,29 @@
 tcp_error_t tcp_uc_close(tcp_conn_t *conn)
 {
-	log_msg(LOG_DEFAULT, LVL_DEBUG, "%s: tcp_uc_close()", conn->name);
+	log_msg(LOG_DEFAULT, LVL_DEBUG, "%s: tcp_uc_close(%p)", conn->name,
+	    conn);
 
 	fibril_mutex_lock(&conn->lock);
 
 	if (conn->cstate == st_closed) {
+		log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_uc_close - ENOTEXIST");
 		fibril_mutex_unlock(&conn->lock);
 		return TCP_ENOTEXIST;
 	}
 
+	if (conn->cstate == st_listen || conn->cstate == st_syn_sent) {
+		log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_uc_close - listen/syn_sent");
+		tcp_conn_reset(conn);
+		tcp_conn_remove(conn);
+		return TCP_EOK;
+	}
+
 	if (conn->snd_buf_fin) {
+		log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_uc_close - ECLOSING");
 		fibril_mutex_unlock(&conn->lock);
 		return TCP_ECLOSING;
 	}
 
+	log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_uc_close - set snd_buf_fin");
 	conn->snd_buf_fin = true;
 	tcp_tqueue_new_data(conn);
