net: fix leak of fd in bind() error path
[fio.git] / engines / net.c
index 4be106a28307e20db7ee26d315877b41d081ffec..d036a581811ac5b945ae074169b90f66f090142f 100644 (file)
@@ -94,18 +94,22 @@ static struct fio_option options[] = {
                            .oval = FIO_TYPE_TCP,
                            .help = "Transmission Control Protocol",
                          },
+#ifdef CONFIG_IPV6
                          { .ival = "tcpv6",
                            .oval = FIO_TYPE_TCP_V6,
                            .help = "Transmission Control Protocol V6",
                          },
+#endif
                          { .ival = "udp",
                            .oval = FIO_TYPE_UDP,
                            .help = "User Datagram Protocol",
                          },
+#ifdef CONFIG_IPV6
                          { .ival = "udpv6",
                            .oval = FIO_TYPE_UDP_V6,
                            .help = "User Datagram Protocol V6",
                          },
+#endif
                          { .ival = "unix",
                            .oval = FIO_TYPE_UNIX,
                            .help = "UNIX domain socket",
@@ -388,7 +392,7 @@ static int fio_netio_send(struct thread_data *td, struct io_u *io_u)
 
        do {
                if (is_udp(o)) {
-                       struct sockaddr *to;
+                       const struct sockaddr *to;
                        socklen_t len;
 
                        if (is_ipv6(o)) {
@@ -909,10 +913,10 @@ static int fio_netio_setup_connect_inet(struct thread_data *td,
 
        if (is_ipv6(o)) {
                af = AF_INET6;
-               dst = &nd->addr6;
+               dst = &nd->addr6.sin6_addr;
        } else {
                af = AF_INET;
-               dst = &nd->addr;
+               dst = &nd->addr.sin_addr;
        }
 
        if (fio_fill_addr(td, host, af, dst, &res))
@@ -1088,6 +1092,7 @@ static int fio_netio_setup_listen_inet(struct thread_data *td, short port)
        }
 
        if (bind(fd, saddr, len) < 0) {
+               close(fd);
                td_verror(td, errno, "bind");
                return 1;
        }
@@ -1190,8 +1195,9 @@ static int fio_netio_setup(struct thread_data *td)
        struct netio_data *nd;
 
        if (!td->files_index) {
-               add_file(td, td->o.filename ?: "net");
+               add_file(td, td->o.filename ?: "net", 0, 0);
                td->o.nr_files = td->o.nr_files ?: 1;
+               td->o.open_files++;
        }
 
        if (!td->io_ops->data) {