diff options
-rw-r--r-- | common.c | 1 | ||||
-rw-r--r-- | degesch.c | 6 | ||||
-rw-r--r-- | kike.c | 7 |
3 files changed, 14 insertions, 0 deletions
@@ -33,6 +33,7 @@ #include <setjmp.h> #include <inttypes.h> #include <arpa/inet.h> +#include <netinet/tcp.h> /// Shorthand to set an error and return failure from the function #define FAIL(...) \ @@ -4732,6 +4732,12 @@ irc_finish_connection (struct server *s, int socket) { struct app_context *ctx = s->ctx; + // Most of our output comes from the user one full command at a time and we + // use output buffering, so it makes a lot of sense to avoid these delays + int yes = 1; + soft_assert (setsockopt (socket, IPPROTO_TCP, TCP_NODELAY, + &yes, sizeof yes) != -1); + set_blocking (socket, false); s->socket = socket; s->transport = get_config_boolean (s->config, "tls") @@ -3421,6 +3421,13 @@ irc_try_fetch_client (struct server_context *ctx, int listen_fd) c->ping_timer.dispatcher = on_client_ping_timer; c->ping_timer.user_data = c; + // A little bit questionable once the traffic gets high enough (IMO), + // but it reduces silly latencies that we don't need because we already + // do buffer our output + int yes = 1; + soft_assert (setsockopt (fd, IPPROTO_TCP, TCP_NODELAY, + &yes, sizeof yes) != -1); + set_blocking (fd, false); client_update_poller (c, NULL); client_set_kill_timer (c); |