Connection timeouts under SMB2 and Samba 3.6.12

Richard Sharpe realrichardsharpe at gmail.com
Sun May 5 12:39:43 MDT 2013


On Sun, May 5, 2013 at 9:27 AM, Richard Sharpe
<realrichardsharpe at gmail.com> wrote:
> On Sat, May 4, 2013 at 11:05 PM, Volker Lendecke
> <Volker.Lendecke at sernet.de> wrote:
>> On Sat, May 04, 2013 at 08:46:16PM -0700, Richard Sharpe wrote:
>>> Hi folks,
>>>
>>> We are seeing smbds hanging around for a long time after the client
>>> has rebooted. The timeout on the receive is around 1900 seconds.
>>>
>>> Has anyone used TCP-level keep-alives to reap smbds for clients that
>>> have rebooted?
>>
>> Yes, sure. Under Linux, it's the TCP_KEEP* options.
>
> These appear to be the constants under FreeBSD:
>
> #define TCPTV_KEEP_INIT ( 75*hz)                /* initial connect keepalive */
> #define TCPTV_KEEP_IDLE (120*60*hz)             /* dflt time before probing */
> #define TCPTV_KEEPINTVL ( 75*hz)                /* default probe interval */
> #define TCPTV_KEEPCNT   8                       /* max probes before drop */
>
> There seems to be no support for these under Samba, but the simplest
> way to support them would be to map the Samba defined ones to these at
> the constant level. Eg,
>
> #ifdef _FREEBSD_ /* or whatever */
> #define TCP_KEEPINTVL TCPTV_KEEPINTVL
> #endif
>
> On the other hand, configure should probably search for these as well
> and add the remappings to config.h.

This would appear to work, although we will get conflicting entries if
both sets are defined for any reason:

diff --git a/lib/util/util_net.c b/lib/util/util_net.c
index 83afda4..f6a46a9 100644
--- a/lib/util/util_net.c
+++ b/lib/util/util_net.c
@@ -778,12 +778,21 @@ static const smb_socket_option socket_options[] = {
 #ifdef TCP_KEEPCNT
   {"TCP_KEEPCNT", IPPROTO_TCP, TCP_KEEPCNT, 0, OPT_INT},
 #endif
+#ifdef TCPTV_KEEPCNT
+  {"TCP_KEEPCNT", IPPROTO_TCP, TCPTV_KEEPCNT, 0, OPT_INT},
+#endif
 #ifdef TCP_KEEPIDLE
   {"TCP_KEEPIDLE", IPPROTO_TCP, TCP_KEEPIDLE, 0, OPT_INT},
 #endif
+#ifdef TCPTV_KEEP_IDLE
+  {"TCP_KEEPIDLE", IPPROTO_TCP, TCPTV_KEEP_IDLE, 0, OPT_INT},
+#endif
 #ifdef TCP_KEEPINTVL
   {"TCP_KEEPINTVL", IPPROTO_TCP, TCP_KEEPINTVL, 0, OPT_INT},
 #endif
+#ifdef TCPTV_KEEPINTVL
+  {"TCP_KEEPINTVL", IPPROTO_TCP, TCPTV_KEEPINVTL, 0, OPT_INT},
+#endif
 #ifdef IPTOS_LOWDELAY
   {"IPTOS_LOWDELAY", IPPROTO_IP, IP_TOS, IPTOS_LOWDELAY, OPT_ON},
 #endif



-- 
Regards,
Richard Sharpe
(何以解憂?唯有杜康。--曹操)


More information about the samba-technical mailing list