From f2d0e26fedba5b3097dc335f602ae62fcf437393 Mon Sep 17 00:00:00 2001 From: Michael Smith Date: Sat, 18 Jan 2003 07:08:00 +0000 Subject: [PATCH] Set TCP_NODELAY on sockets for streams and fileserving. Adapted from a patch sent by Richard Galli svn path=/trunk/icecast/; revision=4260 --- src/connection.c | 1 + src/fserve.c | 1 + src/net/sock.c | 9 +++++++++ src/net/sock.h | 1 + 4 files changed, 12 insertions(+) diff --git a/src/connection.c b/src/connection.c index 6fe1c564..fceb59ba 100644 --- a/src/connection.c +++ b/src/connection.c @@ -770,6 +770,7 @@ static void _handle_get_request(connection_t *con, if(bytes > 0) client->con->sent_bytes += bytes; sock_set_blocking(client->con->sock, SOCK_NONBLOCK); + sock_set_nodelay(client->con->sock); avl_tree_wlock(source->pending_tree); avl_insert(source->pending_tree, (void *)client); diff --git a/src/fserve.c b/src/fserve.c index bd57fe99..41b439b5 100644 --- a/src/fserve.c +++ b/src/fserve.c @@ -380,6 +380,7 @@ int fserve_client_create(client_t *httpclient, char *path) if(bytes > 0) httpclient->con->sent_bytes = bytes; sock_set_blocking(client->client->con->sock, SOCK_NONBLOCK); + sock_set_nodelay(client->client->con->sock); avl_tree_wlock(pending_tree); avl_insert(pending_tree, client); diff --git a/src/net/sock.c b/src/net/sock.c index 132ff13a..1859fc42 100644 --- a/src/net/sock.c +++ b/src/net/sock.c @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -200,6 +201,14 @@ int sock_set_nolinger(sock_t sock) sizeof(struct linger)); } +int sock_set_nodelay(sock_t sock) +{ + int nodelay = 1; + + return setsockopt(sock, SOL_TCP, TCP_NODELAY, (void *)nodelay, + sizeof(int)); +} + int sock_set_keepalive(sock_t sock) { int keepalive = 1; diff --git a/src/net/sock.h b/src/net/sock.h index 28808fa4..42cf278a 100644 --- a/src/net/sock.h +++ b/src/net/sock.h @@ -66,6 +66,7 @@ int sock_valid_socket(sock_t sock); int sock_set_blocking(sock_t sock, const int block); int sock_set_nolinger(sock_t sock); int sock_set_keepalive(sock_t sock); +int sock_set_nodelay(sock_t sock); int sock_close(sock_t sock); /* Connection related socket functions */