+static int fio_netio_accept_connections(struct thread_data *td, int fd,
+ struct sockaddr_in *addr)
+{
+ socklen_t socklen = sizeof(*addr);
+ unsigned int accepts = 0;
+ struct pollfd pfd;
+
+ fprintf(f_out, "fio: waiting for %u connections\n", td->nr_files);
+
+ /*
+ * Accept loop. poll for incoming events, accept them. Repeat until we
+ * have all connections.
+ */
+ while (!td->terminate && accepts < td->nr_files) {
+ struct fio_file *f;
+ int ret, i;
+
+ pfd.fd = fd;
+ pfd.events = POLLIN;
+
+ ret = poll(&pfd, 1, -1);
+ if (ret < 0) {
+ if (errno == EINTR)
+ continue;
+
+ td_verror(td, errno);
+ break;
+ } else if (!ret)
+ continue;
+
+ /*
+ * should be impossible
+ */
+ if (!(pfd.revents & POLLIN))
+ continue;
+
+ for_each_file(td, f, i) {
+ if (f->fd != -1)
+ continue;
+
+ f->fd = accept(fd, (struct sockaddr *) addr, &socklen);
+ if (f->fd < 0) {
+ td_verror(td, errno);
+ return 1;
+ }
+ accepts++;
+ break;
+ }
+ }
+
+ return 0;
+}
+