daemon.c: Add option for tcp no delay
|
|
Allow the NFS tcp sockets to conditionally use TCP_NODELAY
|
|
Upstream-Status: Submitted http://sourceforge.net/p/unfs3/bugs/5/
|
|
---
|
daemon.c | 9 ++++++++-
|
1 file changed, 8 insertions(+), 1 deletion(-)
|
|
--- a/daemon.c
|
+++ b/daemon.c
|
@@ -17,6 +17,7 @@
|
#ifndef WIN32
|
#include <sys/socket.h>
|
#include <netinet/in.h>
|
+#include <netinet/tcp.h>
|
#include <arpa/inet.h>
|
#include <syslog.h>
|
#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);
|