Patrick Williams | c124f4f | 2015-09-15 14:41:29 -0500 | [diff] [blame] | 1 | daemon.c: Add option for tcp no delay |
| 2 | |
| 3 | Allow the NFS tcp sockets to conditionally use TCP_NODELAY |
| 4 | |
| 5 | Upstream-Status: Submitted http://sourceforge.net/p/unfs3/bugs/5/ |
| 6 | |
| 7 | --- |
| 8 | daemon.c | 9 ++++++++- |
| 9 | 1 file changed, 8 insertions(+), 1 deletion(-) |
| 10 | |
| 11 | --- a/daemon.c |
| 12 | +++ b/daemon.c |
| 13 | @@ -17,6 +17,7 @@ |
| 14 | #ifndef WIN32 |
| 15 | #include <sys/socket.h> |
| 16 | #include <netinet/in.h> |
| 17 | +#include <netinet/tcp.h> |
| 18 | #include <arpa/inet.h> |
| 19 | #include <syslog.h> |
| 20 | #else /* WIN32 */ |
| 21 | @@ -75,6 +76,7 @@ unsigned int opt_mount_port = NFS_PORT; |
| 22 | int opt_singleuser = FALSE; |
| 23 | int opt_brute_force = FALSE; |
| 24 | int opt_testconfig = FALSE; |
| 25 | +int opt_tcp_nodelay = FALSE; |
| 26 | struct in_addr opt_bind_addr; |
| 27 | int opt_readable_executables = FALSE; |
| 28 | char *opt_pid_file = NULL; |
| 29 | @@ -208,7 +210,7 @@ static void parse_options(int argc, char |
| 30 | { |
| 31 | |
| 32 | int opt = 0; |
| 33 | - char *optstring = "bcC:de:hl:m:n:prstTuwi:x:y:"; |
| 34 | + char *optstring = "bcC:de:hl:m:Nn:prstTuwi:x:y:"; |
| 35 | |
| 36 | while (opt != -1) { |
| 37 | opt = getopt(argc, argv, optstring); |
| 38 | @@ -295,6 +297,9 @@ static void parse_options(int argc, char |
| 39 | exit(1); |
| 40 | } |
| 41 | break; |
| 42 | + case 'N': |
| 43 | + opt_tcp_nodelay = TRUE; |
| 44 | + break; |
| 45 | case 'n': |
| 46 | opt_nfs_port = strtol(optarg, NULL, 10); |
| 47 | if (opt_nfs_port == 0) { |
| 48 | @@ -802,6 +807,8 @@ static SVCXPRT *create_tcp_transport(uns |
| 49 | sin.sin_addr.s_addr = opt_bind_addr.s_addr; |
| 50 | sock = socket(PF_INET, SOCK_STREAM, 0); |
| 51 | setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (const char *) &on, sizeof(on)); |
| 52 | + if (opt_tcp_nodelay) |
| 53 | + setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on)); |
| 54 | if (bind(sock, (struct sockaddr *) &sin, sizeof(struct sockaddr))) { |
| 55 | perror("bind"); |
| 56 | fprintf(stderr, "Couldn't bind to tcp port %d\n", port); |