daemon.c: Add option for tcp no delay Allow the NFS tcp sockets to conditionally use TCP_NODELAY Upstream-Status: Pending --- daemon.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) --- a/daemon.c +++ b/daemon.c @@ -17,6 +17,7 @@ #ifndef WIN32 #include #include +#include #include #include #else /* WIN32 */ @@ -75,6 +76,7 @@ unsigned int opt_mount_port = NFS_PORT; int opt_singleuser = FALSE; int opt_brute_force = FALSE; int opt_testconfig = FALSE; +int opt_tcp_nodelay = FALSE; struct in_addr opt_bind_addr; int opt_readable_executables = FALSE; char *opt_pid_file = NULL; @@ -208,7 +210,7 @@ static void parse_options(int argc, char { int opt = 0; - char *optstring = "bcC:de:hl:m:n:prstTuwi:x:y:"; + char *optstring = "bcC:de:hl:m:Nn:prstTuwi:x:y:"; while (opt != -1) { opt = getopt(argc, argv, optstring); @@ -295,6 +297,9 @@ static void parse_options(int argc, char exit(1); } break; + case 'N': + opt_tcp_nodelay = TRUE; + break; case 'n': opt_nfs_port = strtol(optarg, NULL, 10); if (opt_nfs_port == 0) { @@ -802,6 +807,8 @@ static SVCXPRT *create_tcp_transport(uns sin.sin_addr.s_addr = opt_bind_addr.s_addr; sock = socket(PF_INET, SOCK_STREAM, 0); setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (const char *) &on, sizeof(on)); + if (opt_tcp_nodelay) + setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on)); if (bind(sock, (struct sockaddr *) &sin, sizeof(struct sockaddr))) { perror("bind"); fprintf(stderr, "Couldn't bind to tcp port %d\n", port);