diff --git a/src/coio.cc b/src/coio.cc
index 4c9a885d2dceae0356c0caeb3766345e6dafc06e..6b94cf2a654ba11d040e28b9e8e98f475faf1c28 100644
--- a/src/coio.cc
+++ b/src/coio.cc
@@ -257,8 +257,10 @@ coio_accept(struct ev_io *coio, struct sockaddr *addr,
 		int fd = sio_accept(coio->fd, addr, &addrlen);
 		if (fd >= 0) {
 			if (evio_setsockopt_client(fd, addr->sa_family,
-						   SOCK_STREAM) != 0)
+						   SOCK_STREAM) != 0) {
+				close(fd);
 				diag_raise();
+			}
 			return fd;
 		}
 		if (! sio_wouldblock(errno))