*/
if ((send_to_net(td) && io_u->ddir == DDIR_READ) ||
(!send_to_net(td) && io_u->ddir == DDIR_WRITE)) {
- td_verror(td, EINVAL);
+ td_verror(td, EINVAL, "bad direction");
return 1;
}
* If offset is different from last end position, it's a seek.
* As network io is purely sequential, we don't allow seeks.
*/
- td_verror(td, EINVAL);
+ td_verror(td, EINVAL, "cannot seek");
return 1;
}
ret = 0; /* must be a SYNC */
if (ret != (int) io_u->xfer_buflen) {
- if (ret > 0) {
+ if (ret >= 0) {
io_u->resid = io_u->xfer_buflen - ret;
io_u->error = 0;
return FIO_Q_COMPLETED;
}
if (io_u->error)
- td_verror(td, io_u->error);
+ td_verror(td, io_u->error, "xfer");
return FIO_Q_COMPLETED;
}
hent = gethostbyname(host);
if (!hent) {
- td_verror(td, errno);
+ td_verror(td, errno, "gethostbyname");
return 1;
}
for_each_file(td, f, i) {
f->fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (f->fd < 0) {
- td_verror(td, errno);
+ td_verror(td, errno, "socket");
return 1;
}
if (connect(f->fd, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
- td_verror(td, errno);
+ td_verror(td, errno, "connect");
return 1;
}
}
if (errno == EINTR)
continue;
- td_verror(td, errno);
+ td_verror(td, errno, "poll");
break;
} else if (!ret)
continue;
f->fd = accept(fd, (struct sockaddr *) addr, &socklen);
if (f->fd < 0) {
- td_verror(td, errno);
+ td_verror(td, errno, "accept");
return 1;
}
accepts++;
fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (fd < 0) {
- td_verror(td, errno);
+ td_verror(td, errno, "socket");
return 1;
}
opt = 1;
if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) < 0) {
- td_verror(td, errno);
+ td_verror(td, errno, "setsockopt");
return 1;
}
#ifdef SO_REUSEPORT
if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &opt, sizeof(opt)) < 0) {
- td_verror(td, errno);
+ td_verror(td, errno, "setsockopt");
return 1;
}
#endif
addr.sin_port = htons(port);
if (bind(fd, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
- td_verror(td, errno);
+ td_verror(td, errno, "bind");
return 1;
}
if (listen(fd, 1) < 0) {
- td_verror(td, errno);
+ td_verror(td, errno, "listen");
return 1;
}
return 1;
}
- if (td->iomix) {
+ if (td_rw(td)) {
log_err("fio: network connections must be read OR write\n");
return 1;
}
strcpy(host, buf);
port = atoi(sep);
- if (td->ddir == DDIR_READ) {
+ if (td_read(td)) {
send_to_net(td) = 0;
ret = fio_netio_setup_listen(td, port);
} else {