diff --git a/lib/tcptransport.cc b/lib/tcptransport.cc index 3216ba4f883ec47fafb12d30f6ad6c2824ce8926..63faccc91a00fb760c55b648507266ef1d3d999f 100644 --- a/lib/tcptransport.cc +++ b/lib/tcptransport.cc @@ -271,6 +271,13 @@ TCPTransport::Register(TransportReceiver *receiver, PWarning("Failed to set SO_REUSEADDR on TCP listening socket"); } + // Set TCP_NODELAY + n = 1; + if (setsockopt(fd, IPPROTO_TCP, + TCP_NODELAY, (char *)&n, sizeof(n)) < 0) { + PWarning("Failed to set TCP_NODELAY on TCP listening socket"); + } + // Registering a replica. Bind socket to the designated // host/port const string &host = config.replica(replicaIdx).host; @@ -555,6 +562,9 @@ TCPTransport::TCPReadableCallback(struct bufferevent *bev, void *arg) uint32_t *magic; magic = (uint32_t *)evbuffer_pullup(evbuf, sizeof(*magic)); + if (magic == NULL) { + return; + } ASSERT(*magic == MAGIC); size_t *sz;