Index: uspace/srv/net/tl/tcp/conn.c
===================================================================
--- uspace/srv/net/tl/tcp/conn.c	(revision fe5e9629448f7d1befa73d7c974f8cedf7bfcbcd)
+++ uspace/srv/net/tl/tcp/conn.c	(revision f0b74b2254c006ad49cdf42438d181b82e8f7ec6)
@@ -491,6 +491,10 @@
 		    conn->snd_una, seg->ack, conn->snd_nxt);
 		if (!seq_no_ack_acceptable(conn, seg->ack)) {
-			log_msg(LVL_WARN, "ACK not acceptable, send RST.");
-			tcp_reply_rst(&conn->ident, seg);
+			if ((seg->ctrl & CTL_RST) == 0) {
+				log_msg(LVL_WARN, "ACK not acceptable, send RST");
+				tcp_reply_rst(&conn->ident, seg);
+			} else {
+				log_msg(LVL_WARN, "RST,ACK not acceptable, drop");
+			}
 			return;
 		}
@@ -498,10 +502,16 @@
 
 	if ((seg->ctrl & CTL_RST) != 0) {
-		log_msg(LVL_DEBUG, "%s: Connection reset. -> Closed",
-		    conn->name);
-		/* Reset connection */
-		tcp_conn_reset(conn);
-		/* XXX delete connection */
-		return;
+		/* If we get here, we have either an acceptable ACK or no ACK */
+		if ((seg->ctrl & CTL_ACK) != 0) {
+			log_msg(LVL_DEBUG, "%s: Connection reset. -> Closed",
+			    conn->name);
+			/* Reset connection */
+			tcp_conn_reset(conn);
+			return;
+		} else {
+			log_msg(LVL_DEBUG, "%s: RST without ACK, drop",
+			    conn->name);
+			return;
+		}
 	}
 
