diff --git a/src/knot/server/server.c b/src/knot/server/server.c
index b84ae3a17455d63f4b6ea32369d169dd75c84403..3fdd425773fffc8fe003b6aec5ade76fb83af991 100644
--- a/src/knot/server/server.c
+++ b/src/knot/server/server.c
@@ -118,12 +118,16 @@ static int server_init_iface(iface_t *new_if, conf_iface_t *cfg_if)
 	char addr_str[SOCKADDR_STRLEN] = {0};
 	sockaddr_tostr(&cfg_if->addr, addr_str, sizeof(addr_str));
 
+#if defined(SO_REUSEPORT)
+	/* Each thread binds own socket. */
+	int sock = -1;
+#else
 	/* Create bound UDP socket. */
 	int sock = net_bound_socket(SOCK_DGRAM, &cfg_if->addr);
 	if (sock < 0) {
 		return sock;
 	}
-
+#endif
 	new_if->fd[IO_UDP] = sock;
 
 	/* Create bound TCP socket. */