static void set_options(int rs) { int val; if (buffer_size) { rsetsockopt(rs, SOL_SOCKET, SO_SNDBUF, (void *) &buffer_size, sizeof buffer_size); rsetsockopt(rs, SOL_SOCKET, SO_RCVBUF, (void *) &buffer_size, sizeof buffer_size); } else { val = 1 << 19; rsetsockopt(rs, SOL_SOCKET, SO_SNDBUF, (void *) &val, sizeof val); rsetsockopt(rs, SOL_SOCKET, SO_RCVBUF, (void *) &val, sizeof val); } val = 1; rsetsockopt(rs, IPPROTO_TCP, TCP_NODELAY, (void *) &val, sizeof(val)); rsetsockopt(rs, SOL_RDMA, RDMA_IOMAPSIZE, (void *) &val, sizeof val); if (flags & MSG_DONTWAIT) rfcntl(rs, F_SETFL, O_NONBLOCK); /* Inline size based on experimental data */ if (optimization == opt_latency) { val = 384; rsetsockopt(rs, SOL_RDMA, RDMA_INLINE, &val, sizeof val); } else if (optimization == opt_bandwidth) { val = 0; rsetsockopt(rs, SOL_RDMA, RDMA_INLINE, &val, sizeof val); } }
int fcntl(int socket, int cmd, ... /* arg */) { va_list args; long lparam; void *pparam; int fd, ret; init_preload(); va_start(args, cmd); switch (cmd) { case F_GETFD: case F_GETFL: case F_GETOWN: case F_GETSIG: case F_GETLEASE: ret = (fd_get(socket, &fd) == fd_rsocket) ? rfcntl(fd, cmd) : real.fcntl(fd, cmd); break; case F_DUPFD: /*case F_DUPFD_CLOEXEC:*/ case F_SETFD: case F_SETFL: case F_SETOWN: case F_SETSIG: case F_SETLEASE: case F_NOTIFY: lparam = va_arg(args, long); ret = (fd_get(socket, &fd) == fd_rsocket) ? rfcntl(fd, cmd, lparam) : real.fcntl(fd, cmd, lparam); break; default: pparam = va_arg(args, void *); ret = (fd_get(socket, &fd) == fd_rsocket) ? rfcntl(fd, cmd, pparam) : real.fcntl(fd, cmd, pparam); break; } va_end(args); return ret; }