MINOR: session: simplify error path in session_accept_fd()

Now that this function is always called with an initialized connection
and that the control layer is always initialized, we don't need to play
games with fdtab[] to decide how to close, we can simply rely on the
regular close path using conn_ctrl_close(), which can be fused with
conn_xprt_close() into conn_full_close().

The code is cleaner because the FD is now used only for some
protocol-specific setup (that will eventually have to move) and to
try to send a hard-coded HTTP 500 error message on raw sockets.
diff --git a/src/session.c b/src/session.c
index 2673482..b065ff3 100644
--- a/src/session.c
+++ b/src/session.c
@@ -271,11 +271,8 @@
 	  * done below, for all errors. */
 	sess->listener = NULL;
 	session_free(sess);
+
  out_free_conn:
-	conn_stop_tracking(cli_conn);
-	conn_xprt_close(cli_conn);
-	conn_free(cli_conn);
-	listener_release(l);
 	if (ret < 0 && l->bind_conf->xprt == xprt_get(XPRT_RAW) &&
 	    p->mode == PR_MODE_HTTP && l->bind_conf->mux_proto == NULL) {
 		/* critical error, no more memory, try to emit a 500 response */
@@ -283,10 +280,10 @@
 		     MSG_DONTWAIT|MSG_NOSIGNAL);
 	}
 
-	if (fdtab[cfd].owner)
-		fd_delete(cfd);
-	else
-		close(cfd);
+	conn_stop_tracking(cli_conn);
+	conn_full_close(cli_conn);
+	conn_free(cli_conn);
+	listener_release(l);
 	return ret;
 }