swrap: Add support for TCP_NODELAY in getsockopt()
authorAndreas Schneider <asn@samba.org>
Mon, 14 Sep 2015 20:06:52 +0000 (22:06 +0200)
committerMichael Adam <obnox@samba.org>
Wed, 14 Oct 2015 08:27:46 +0000 (10:27 +0200)
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Michael Adam <obnox@samba.org>
src/socket_wrapper.c

index 527ba21e57a2223ffec508ef21446775bcc5cd7c..aad5f3ea8d7b34b2eaaada8faafea4067832a0bb 100644 (file)
@@ -3351,6 +3351,29 @@ static int swrap_getsockopt(int s, int level, int optname,
                                               optval,
                                               optlen);
                }
+       } else if (level == IPPROTO_TCP) {
+               switch (optname) {
+#ifdef TCP_NODELAY
+               case TCP_NODELAY:
+                       /*
+                        * This enables sending packets directly out over TCP.
+                        * As a unix socket is doing that any way, report it as
+                        * enabled.
+                        */
+                       if (optval == NULL || optlen == NULL ||
+                           *optlen < (socklen_t)sizeof(int)) {
+                               errno = EINVAL;
+                               return -1;
+                       }
+
+                       *optlen = sizeof(int);
+                       *(int *)optval = si->tcp_nodelay;
+
+                       return 0;
+#endif /* TCP_NODELAY */
+               default:
+                       break;
+               }
        }
 
        errno = ENOPROTOOPT;