Index: uspace/srv/net/tcp/sock.c
===================================================================
--- uspace/srv/net/tcp/sock.c	(revision bae2a79e350ae4a3b0b75d5e6598946426b53acb)
+++ uspace/srv/net/tcp/sock.c	(revision d37d500ebc15504114ead971e976404057bbf0ae)
@@ -89,4 +89,6 @@
 	socket = (tcp_sockdata_t *)sock_core->specific_data;
 	(void)socket;
+
+	/* XXX We need to initiate connection cleanup here */
 }
 
@@ -835,4 +837,9 @@
 		}
 	}
+
+	/* Clean up */
+	log_msg(LVL_DEBUG, "tcp_sock_connection: Clean up");
+	async_hangup(client.sess);
+	socket_cores_release(NULL, &client.sockets, &gsock, tcp_free_sock_data);
 }
 
Index: uspace/srv/net/udp/sock.c
===================================================================
--- uspace/srv/net/udp/sock.c	(revision bae2a79e350ae4a3b0b75d5e6598946426b53acb)
+++ uspace/srv/net/udp/sock.c	(revision d37d500ebc15504114ead971e976404057bbf0ae)
@@ -85,5 +85,6 @@
 
 	socket = (udp_sockdata_t *)sock_core->specific_data;
-	(void)socket;
+	assert(socket->assoc != NULL);
+	udp_uc_destroy(socket->assoc);
 }
 
@@ -513,7 +514,4 @@
 	fibril_mutex_lock(&socket->lock);
 
-	assert(socket->assoc != NULL);
-	udp_uc_destroy(socket->assoc);
-
 	rc = socket_destroy(NULL, socket_id, &client->sockets, &gsock,
 	    udp_free_sock_data);
@@ -599,4 +597,9 @@
 		}
 	}
+
+	/* Clean up */
+	log_msg(LVL_DEBUG, "udp_sock_connection: Clean up");
+	async_hangup(client.sess);
+	socket_cores_release(NULL, &client.sockets, &gsock, udp_free_sock_data);
 }
 
