From 4becb93787c69520c4e506e067a095db1c9fd8ce Mon Sep 17 00:00:00 2001 From: folkert van heusden Date: Wed, 1 May 2024 18:53:48 +0200 Subject: [PATCH 1/2] NBD client: nodelay --- disk_backend_nbd.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/disk_backend_nbd.cpp b/disk_backend_nbd.cpp index 031aede..1042ab6 100644 --- a/disk_backend_nbd.cpp +++ b/disk_backend_nbd.cpp @@ -153,8 +153,10 @@ bool disk_backend_nbd::connect(const bool retry) DOLOG(warning, true, "disk_backend_nbd::connect: magic invalid"); } - if (fd != -1) + if (fd != -1) { DOLOG(info, false, "NBD size: %u", NTOHLL(nbd_hello.size)); + set_nodelay(fd); + } } while(fd == -1 && retry); From 95db008a686ee0f95ee7c3948ec7138aa8e86ed5 Mon Sep 17 00:00:00 2001 From: folkert van heusden Date: Wed, 1 May 2024 18:56:51 +0200 Subject: [PATCH 2/2] NBD client: nodelay --- utils.cpp | 17 +++++++++++++++++ utils.h | 2 ++ 2 files changed, 19 insertions(+) diff --git a/utils.cpp b/utils.cpp index 1e5f294..1b86e81 100644 --- a/utils.cpp +++ b/utils.cpp @@ -6,7 +6,11 @@ #if defined(ESP32) || defined(BUILD_FOR_RP2040) #include #include "rp2040.h" +#else +#include +#include #endif +#include #include #include @@ -23,6 +27,8 @@ #include "win32.h" #endif +#include "log.h" + void setBit(uint16_t & v, const int bit, const bool vb) { @@ -236,3 +242,14 @@ void update_word(uint16_t *const w, const bool msb, const uint8_t v) (*w) |= v; } } + +void set_nodelay(const int fd) +{ + int flags = 1; +#if defined(__FreeBSD__) || defined(ESP32) + if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (void *)&flags, sizeof(flags)) == -1) +#else + if (setsockopt(fd, SOL_TCP, TCP_NODELAY, (void *)&flags, sizeof(flags)) == -1) +#endif + DOLOG(warning, true, "Cannot disable nagle algorithm"); +} diff --git a/utils.h b/utils.h index be27c83..b5590f2 100644 --- a/utils.h +++ b/utils.h @@ -25,3 +25,5 @@ ssize_t WRITE(int fd, const char *whereto, size_t len); ssize_t READ(int fd, char *whereto, size_t len); void update_word(uint16_t *const w, const bool msb, const uint8_t v); + +void set_nodelay(const int fd);