]> git.sesse.net Git - cubemap/blobdiff - server.cpp
When doing persistent connections, explicitly flush the socket so that we do not...
[cubemap] / server.cpp
index e9bc654eb1a3cbe4d667f3bafef6119aabec01fa..a7f579c170928eabae1ca0d025c5ec1204741dd5 100644 (file)
@@ -1,6 +1,7 @@
 #include <assert.h>
 #include <errno.h>
 #include <netinet/in.h>
+#include <netinet/tcp.h>
 #include <pthread.h>
 #include <stdint.h>
 #include <stdio.h>
@@ -1247,6 +1248,14 @@ bool Server::more_requests(Client *client)
        // Log to access_log.
        access_log->write(client->get_stats());
 
+       // Flush pending data; does not cancel out TCP_CORK (since that still takes priority),
+       // but does a one-off flush.
+       int one = 1;
+       if (setsockopt(client->sock, SOL_TCP, TCP_NODELAY, &one, sizeof(one)) == -1) {
+               log_perror("setsockopt(TCP_NODELAY)");
+               // Can still continue.
+       }
+
        // Switch states and reset the parsers. We don't reset statistics.
        client->state = Client::READING_REQUEST;
        client->url.clear();