#include <sys/epoll.h>
 #include <sys/types.h>
 #include <sys/socket.h>
+#include <sys/resource.h>
 #include <unistd.h>
 
 #ifndef ARRAY_SIZE
        struct sockaddr * const saddr = new_any_sockaddr(p.send_family, sport);
        struct sockaddr * const daddr =
                new_loopback_sockaddr(p.send_family, p.recv_port);
-       const int fd = socket(p.send_family, p.protocol, 0);
+       const int fd = socket(p.send_family, p.protocol, 0), one = 1;
 
        if (fd < 0)
                error(1, errno, "failed to create send socket");
 
+       if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)))
+               error(1, errno, "failed to set reuseaddr");
+
        if (bind(fd, saddr, sockaddr_size()))
                error(1, errno, "failed to bind send socket");
 
        }
 }
 
+static struct rlimit rlim_old, rlim_new;
+
+static  __attribute__((constructor)) void main_ctor(void)
+{
+       getrlimit(RLIMIT_MEMLOCK, &rlim_old);
+       rlim_new.rlim_cur = rlim_old.rlim_cur + (1UL << 20);
+       rlim_new.rlim_max = rlim_old.rlim_max + (1UL << 20);
+       setrlimit(RLIMIT_MEMLOCK, &rlim_new);
+}
+
+static __attribute__((destructor)) void main_dtor(void)
+{
+       setrlimit(RLIMIT_MEMLOCK, &rlim_old);
+}
+
 int main(void)
 {
        fprintf(stderr, "---- IPv4 UDP ----\n");