@@ -115,6 +115,27 @@ private SslClient(SslContext context, EndPoint endpoint, string address, int por
115115 /// </remarks>
116116 public bool OptionKeepAlive { get ; set ; }
117117 /// <summary>
118+ /// Option: TCP keep alive time
119+ /// </summary>
120+ /// <remarks>
121+ /// The number of seconds a TCP connection will remain alive/idle before keepalive probes are sent to the remote
122+ /// </remarks>
123+ public int OptionTcpKeepAliveTime { get ; set ; } = - 1 ;
124+ /// <summary>
125+ /// Option: TCP keep alive interval
126+ /// </summary>
127+ /// <remarks>
128+ /// The number of seconds a TCP connection will wait for a keepalive response before sending another keepalive probe
129+ /// </remarks>
130+ public int OptionTcpKeepAliveInterval { get ; set ; } = - 1 ;
131+ /// <summary>
132+ /// Option: TCP keep alive retry count
133+ /// </summary>
134+ /// <remarks>
135+ /// The number of TCP keep alive probes that will be sent before the connection is terminated
136+ /// </remarks>
137+ public int OptionTcpKeepAliveRetryCount { get ; set ; } = - 1 ;
138+ /// <summary>
118139 /// Option: no delay
119140 /// </summary>
120141 /// <remarks>
@@ -244,6 +265,12 @@ public virtual bool Connect()
244265 // Apply the option: keep alive
245266 if ( OptionKeepAlive )
246267 Socket . SetSocketOption ( SocketOptionLevel . Socket , SocketOptionName . KeepAlive , true ) ;
268+ if ( OptionTcpKeepAliveTime >= 0 )
269+ Socket . SetSocketOption ( SocketOptionLevel . Tcp , SocketOptionName . TcpKeepAliveTime , OptionTcpKeepAliveTime ) ;
270+ if ( OptionTcpKeepAliveInterval >= 0 )
271+ Socket . SetSocketOption ( SocketOptionLevel . Tcp , SocketOptionName . TcpKeepAliveInterval , OptionTcpKeepAliveInterval ) ;
272+ if ( OptionTcpKeepAliveRetryCount >= 0 )
273+ Socket . SetSocketOption ( SocketOptionLevel . Tcp , SocketOptionName . TcpKeepAliveRetryCount , OptionTcpKeepAliveRetryCount ) ;
247274 // Apply the option: no delay
248275 if ( OptionNoDelay )
249276 Socket . SetSocketOption ( SocketOptionLevel . Tcp , SocketOptionName . NoDelay , true ) ;
@@ -813,6 +840,12 @@ private void ProcessConnect(SocketAsyncEventArgs e)
813840 // Apply the option: keep alive
814841 if ( OptionKeepAlive )
815842 Socket . SetSocketOption ( SocketOptionLevel . Socket , SocketOptionName . KeepAlive , true ) ;
843+ if ( OptionTcpKeepAliveTime >= 0 )
844+ Socket . SetSocketOption ( SocketOptionLevel . Tcp , SocketOptionName . TcpKeepAliveTime , OptionTcpKeepAliveTime ) ;
845+ if ( OptionTcpKeepAliveInterval >= 0 )
846+ Socket . SetSocketOption ( SocketOptionLevel . Tcp , SocketOptionName . TcpKeepAliveInterval , OptionTcpKeepAliveInterval ) ;
847+ if ( OptionTcpKeepAliveRetryCount >= 0 )
848+ Socket . SetSocketOption ( SocketOptionLevel . Tcp , SocketOptionName . TcpKeepAliveRetryCount , OptionTcpKeepAliveRetryCount ) ;
816849 // Apply the option: no delay
817850 if ( OptionNoDelay )
818851 Socket . SetSocketOption ( SocketOptionLevel . Tcp , SocketOptionName . NoDelay , true ) ;
0 commit comments