diff --git a/sway/ipc-server.c b/sway/ipc-server.c
index 0cacc515..3600cab2 100644
--- a/sway/ipc-server.c
+++ b/sway/ipc-server.c
@@ -161,7 +161,8 @@ int ipc_handle_connection(int fd, uint32_t mask, void *data) {
 	}
 
 	int flags;
-	if ((flags=fcntl(client_fd, F_GETFD)) == -1 || fcntl(client_fd, F_SETFD, flags|FD_CLOEXEC) == -1) {
+	if ((flags = fcntl(client_fd, F_GETFD)) == -1
+			|| fcntl(client_fd, F_SETFD, flags|FD_CLOEXEC) == -1) {
 		sway_log_errno(L_ERROR, "Unable to set CLOEXEC on IPC client socket");
 		close(client_fd);
 		return 0;
@@ -199,6 +200,8 @@ int ipc_client_handle_readable(int client_fd, uint32_t mask, void *data) {
 	}
 
 	if (mask & WLC_EVENT_HANGUP) {
+		sway_log(L_DEBUG, "Client %d hung up", client->fd);
+		close(client->fd);
 		client->fd = -1;
 		ipc_client_disconnect(client);
 		return 0;