Index: uspace/app/nterm/conn.c
===================================================================
--- uspace/app/nterm/conn.c	(revision 048cd69e69ce8a5ca8bbf5d8a5b5451745dca93a)
+++ uspace/app/nterm/conn.c	(revision 204ba4771af4f0ec3835cd55586cdc002020f247)
@@ -75,5 +75,5 @@
 		rc = tcp_conn_recv(conn, recv_buf, RECV_BUF_SIZE, &nrecv);
 		if (rc != EOK) {
-			printf("\n[Receive error]\n");
+			printf("\n[Receive error %d]\n", rc);
 			break;
 		}
Index: uspace/lib/c/generic/inet/tcp.c
===================================================================
--- uspace/lib/c/generic/inet/tcp.c	(revision 048cd69e69ce8a5ca8bbf5d8a5b5451745dca93a)
+++ uspace/lib/c/generic/inet/tcp.c	(revision 204ba4771af4f0ec3835cd55586cdc002020f247)
@@ -525,4 +525,7 @@
 	fibril_condvar_broadcast(&conn->cv);
 
+	if (conn->cb != NULL && conn->cb->data_avail != NULL)
+		conn->cb->data_avail(conn);
+
 	async_answer_0(iid, EOK);
 }
Index: uspace/srv/net/tcp/conn.c
===================================================================
--- uspace/srv/net/tcp/conn.c	(revision 048cd69e69ce8a5ca8bbf5d8a5b5451745dca93a)
+++ uspace/srv/net/tcp/conn.c	(revision 204ba4771af4f0ec3835cd55586cdc002020f247)
@@ -1011,7 +1011,9 @@
 
 	/* Signal to the receive function that new data has arrived */
-	fibril_condvar_broadcast(&conn->rcv_buf_cv);
-	if (conn->cb != NULL && conn->cb->recv_data != NULL)
-		conn->cb->recv_data(conn, conn->cb_arg);
+	if (xfer_size > 0) {
+		fibril_condvar_broadcast(&conn->rcv_buf_cv);
+		if (conn->cb != NULL && conn->cb->recv_data != NULL)
+			conn->cb->recv_data(conn, conn->cb_arg);
+	}
 
 	log_msg(LOG_DEFAULT, LVL_DEBUG, "Received %zu bytes of data.", xfer_size);
Index: uspace/srv/net/tcp/service.c
===================================================================
--- uspace/srv/net/tcp/service.c	(revision 048cd69e69ce8a5ca8bbf5d8a5b5451745dca93a)
+++ uspace/srv/net/tcp/service.c	(revision 204ba4771af4f0ec3835cd55586cdc002020f247)
@@ -769,5 +769,5 @@
 	}
 
-	size = max(size, 16384);
+	size = min(size, 16384);
 	data = malloc(size);
 	if (data == NULL) {
