Index: uspace/app/nterm/conn.c
===================================================================
--- uspace/app/nterm/conn.c	(revision 01a7aa187b82df4ff11a19c34ee7ffac75ab2786)
+++ uspace/app/nterm/conn.c	(revision 7c912b6fc05a13f4e6a53dd5ad6dd9249406ea85)
@@ -38,4 +38,5 @@
 #include <net/socket.h>
 #include <stdio.h>
+#include <str_error.h>
 #include <sys/types.h>
 
@@ -46,5 +47,5 @@
 static fid_t rcv_fid;
 
-#define RECV_BUF_SIZE 1
+#define RECV_BUF_SIZE 1024
 static uint8_t recv_buf[RECV_BUF_SIZE];
 
@@ -61,5 +62,8 @@
 	}
 
-	printf("Recv fibril terminated.\n");
+	if (nr == ENOTCONN)
+		printf("\n[Other side has closed the connection]\n");
+	else
+		printf("'\n[Receive errror (%s)]\n", str_error(nr));
 
 	return 0;
Index: uspace/app/nterm/nterm.c
===================================================================
--- uspace/app/nterm/nterm.c	(revision 01a7aa187b82df4ff11a19c34ee7ffac75ab2786)
+++ uspace/app/nterm/nterm.c	(revision 7c912b6fc05a13f4e6a53dd5ad6dd9249406ea85)
@@ -68,5 +68,5 @@
 	rc = conn_send(cbuf, offs);
 	if (rc != EOK) {
-		printf("Failed sending data.\n");
+		printf("[Failed sending data]\n");
 	}
 }
@@ -106,4 +106,6 @@
 		putchar(dp[i]);
 	}
+
+	fflush(stdout);
 }
 
Index: uspace/srv/net/tcp/conn.c
===================================================================
--- uspace/srv/net/tcp/conn.c	(revision 01a7aa187b82df4ff11a19c34ee7ffac75ab2786)
+++ uspace/srv/net/tcp/conn.c	(revision 7c912b6fc05a13f4e6a53dd5ad6dd9249406ea85)
@@ -184,5 +184,5 @@
 void tcp_conn_addref(tcp_conn_t *conn)
 {
-	log_msg(LVL_DEBUG, "%s: tcp_conn_addref(%p)", conn->name, conn);
+	log_msg(LVL_DEBUG2, "%s: tcp_conn_addref(%p)", conn->name, conn);
 	atomic_inc(&conn->refcnt);
 }
@@ -196,5 +196,5 @@
 void tcp_conn_delref(tcp_conn_t *conn)
 {
-	log_msg(LVL_DEBUG, "%s: tcp_conn_delref(%p)", conn->name, conn);
+	log_msg(LVL_DEBUG2, "%s: tcp_conn_delref(%p)", conn->name, conn);
 
 	if (atomic_predec(&conn->refcnt) == 0)
@@ -312,5 +312,5 @@
 static bool tcp_socket_match(tcp_sock_t *sock, tcp_sock_t *patt)
 {
-	log_msg(LVL_DEBUG, "tcp_socket_match(sock=(%x,%u), pat=(%x,%u))",
+	log_msg(LVL_DEBUG2, "tcp_socket_match(sock=(%x,%u), pat=(%x,%u))",
 	    sock->addr.ipv4, sock->port, patt->addr.ipv4, patt->port);
 
@@ -323,5 +323,5 @@
 		return false;
 
-	log_msg(LVL_DEBUG, " -> match");
+	log_msg(LVL_DEBUG2, " -> match");
 
 	return true;
@@ -331,5 +331,5 @@
 static bool tcp_sockpair_match(tcp_sockpair_t *sp, tcp_sockpair_t *pattern)
 {
-	log_msg(LVL_DEBUG, "tcp_sockpair_match(%p, %p)", sp, pattern);
+	log_msg(LVL_DEBUG2, "tcp_sockpair_match(%p, %p)", sp, pattern);
 
 	if (!tcp_socket_match(&sp->local, &pattern->local))
@@ -360,5 +360,5 @@
 		tcp_conn_t *conn = list_get_instance(link, tcp_conn_t, link);
 		tcp_sockpair_t *csp = &conn->ident;
-		log_msg(LVL_DEBUG, "compare with conn (f:(%x,%u), l:(%x,%u))",
+		log_msg(LVL_DEBUG2, "compare with conn (f:(%x,%u), l:(%x,%u))",
 		    csp->foreign.addr.ipv4, csp->foreign.port,
 		    csp->local.addr.ipv4, csp->local.port);
Index: uspace/srv/net/tcp/segment.c
===================================================================
--- uspace/srv/net/tcp/segment.c	(revision 01a7aa187b82df4ff11a19c34ee7ffac75ab2786)
+++ uspace/srv/net/tcp/segment.c	(revision 7c912b6fc05a13f4e6a53dd5ad6dd9249406ea85)
@@ -248,11 +248,11 @@
 void tcp_segment_dump(tcp_segment_t *seg)
 {
-	log_msg(LVL_DEBUG, "Segment dump:");
-	log_msg(LVL_DEBUG, " - ctrl = %u", (unsigned)seg->ctrl);
-	log_msg(LVL_DEBUG, " - seq = % " PRIu32, seg->seq);
-	log_msg(LVL_DEBUG, " - ack = % " PRIu32, seg->ack);
-	log_msg(LVL_DEBUG, " - len = % " PRIu32, seg->len);
-	log_msg(LVL_DEBUG, " - wnd = % " PRIu32, seg->wnd);
-	log_msg(LVL_DEBUG, " - up = % " PRIu32, seg->up);
+	log_msg(LVL_DEBUG2, "Segment dump:");
+	log_msg(LVL_DEBUG2, " - ctrl = %u", (unsigned)seg->ctrl);
+	log_msg(LVL_DEBUG2, " - seq = % " PRIu32, seg->seq);
+	log_msg(LVL_DEBUG2, " - ack = % " PRIu32, seg->ack);
+	log_msg(LVL_DEBUG2, " - len = % " PRIu32, seg->len);
+	log_msg(LVL_DEBUG2, " - wnd = % " PRIu32, seg->wnd);
+	log_msg(LVL_DEBUG2, " - up = % " PRIu32, seg->up);
 }
 
Index: uspace/srv/net/tcp/sock.c
===================================================================
--- uspace/srv/net/tcp/sock.c	(revision 01a7aa187b82df4ff11a19c34ee7ffac75ab2786)
+++ uspace/srv/net/tcp/sock.c	(revision 7c912b6fc05a13f4e6a53dd5ad6dd9249406ea85)
@@ -652,5 +652,5 @@
 	log_msg(LVL_DEBUG, "tcp_sock_recvfrom(): lock recv_buffer_lock");
 	fibril_mutex_lock(&socket->recv_buffer_lock);
-	while (socket->recv_buffer_used == 0) {
+	while (socket->recv_buffer_used == 0 && socket->recv_error == TCP_EOK) {
 		log_msg(LVL_DEBUG, "wait for recv_buffer_cv + recv_buffer_used != 0");
 		fibril_condvar_wait(&socket->recv_buffer_cv,
@@ -850,5 +850,7 @@
 		if (trc != TCP_EOK) {
 			sock->recv_error = trc;
+			fibril_condvar_broadcast(&sock->recv_buffer_cv);
 			fibril_mutex_unlock(&sock->recv_buffer_lock);
+			tcp_sock_notify_data(sock->sock_core);
 			break;
 		}
@@ -857,6 +859,6 @@
 
 		sock->recv_buffer_used = data_len;
+		fibril_condvar_broadcast(&sock->recv_buffer_cv);
 		fibril_mutex_unlock(&sock->recv_buffer_lock);
-		fibril_condvar_broadcast(&sock->recv_buffer_cv);
 		tcp_sock_notify_data(sock->sock_core);
 	}
