+ struct fio_file *f = io_u->file;
+ int ret, flags = 0;
+
+ if (io_u->ddir == DDIR_WRITE) {
+ /*
+ * if we are going to write more, set MSG_MORE
+ */
+ if (td->this_io_bytes[DDIR_WRITE] + io_u->xfer_buflen <
+ td->io_size)
+ flags = MSG_MORE;
+
+ ret = send(f->fd, io_u->xfer_buf, io_u->xfer_buflen, flags);
+ } else if (io_u->ddir == DDIR_READ) {
+ flags = MSG_WAITALL;
+ ret = recv(f->fd, io_u->xfer_buf, io_u->xfer_buflen, flags);
+ } else
+ ret = 0; /* must be a SYNC */
+
+ if (ret != (int) io_u->xfer_buflen) {
+ if (ret >= 0) {
+ io_u->resid = io_u->xfer_buflen - ret;
+ io_u->error = 0;
+ return FIO_Q_COMPLETED;
+ } else
+ io_u->error = errno;
+ }