#include <sys/poll.h>
#include <sys/types.h>
#include <sys/wait.h>
-#include <sys/mman.h>
+#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include "fio.h"
#include "server.h"
#include "crc/crc16.h"
+#include "ieee754.h"
int fio_net_port = 8765;
static int accept_loop(int listen_sk)
{
struct sockaddr_in addr;
- unsigned int len = sizeof(addr);
+ fio_socklen_t len = sizeof(addr);
struct pollfd pfd;
int ret, sk, flags, exitval = 0;
if (server_fd != -1)
return fio_net_send_cmd(server_fd, FIO_NET_CMD_TEXT, buf, len);
- return 0;
+ return fwrite(buf, len, 1, f_err);
}
static void convert_io_stat(struct io_stat *dst, struct io_stat *src)
dst->max_val = cpu_to_le64(src->max_val);
dst->min_val = cpu_to_le64(src->min_val);
dst->samples = cpu_to_le64(src->samples);
- /* FIXME */
- dst->mean = __cpu_to_le64(src->mean);
- dst->S = __cpu_to_le64(src->S);
+
+ /*
+ * Encode to IEEE 754 for network transfer
+ */
+ dst->mean.u.i = __cpu_to_le64(fio_double_to_uint64(src->mean.u.f));
+ dst->S.u.i = __cpu_to_le64(fio_double_to_uint64(src->S.u.f));
}
static void convert_gs(struct group_run_stats *dst, struct group_run_stats *src)
p.ts.minf = cpu_to_le64(ts->minf);
p.ts.majf = cpu_to_le64(ts->majf);
p.ts.clat_percentiles = cpu_to_le64(ts->clat_percentiles);
- p.ts.percentile_list = NULL;
+
+ for (i = 0; i < FIO_IO_U_LIST_MAX_LEN; i++) {
+ fio_fp64_t *fp = &p.ts.percentile_list[i];
+
+ fp->u.i = __cpu_to_le64(fio_double_to_uint64(fp->u.f));
+ }
for (i = 0; i < FIO_IO_U_MAP_NR; i++) {
p.ts.io_u_map[i] = cpu_to_le32(ts->io_u_map[i]);
{
struct sockaddr_in saddr_in;
struct sockaddr addr;
- unsigned int len;
+ fio_socklen_t len;
int sk, opt, ret;
dprint(FD_NET, "starting server\n");