GithubHelp home page GithubHelp logo

keepalive option about supersimpletcp HOT 4 OPEN

jwj15 avatar jwj15 commented on June 12, 2024
keepalive option

from supersimpletcp.

Comments (4)

jchristn avatar jchristn commented on June 12, 2024

Hi @jwj15 so sorry for taking so long to get back to you on this. Looking at it now.

from supersimpletcp.

jchristn avatar jchristn commented on June 12, 2024

Looks like we'll also have to employ RuntimeInformation.IsOSPlatform (see https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.runtimeinformation.isosplatform?view=net-6.0) and apply the version major/minor check only against those that are running Windows.

Is it only the TcpKeepAliveRetryCount that is problematic? How about the others?

This will have to be implemented in a way that doesn't create problems when using some Linux variant that has what appears to be a version number equal to or less than Windows 7.

from supersimpletcp.

jwj15 avatar jwj15 commented on June 12, 2024

I'm not sure if it's a Windows version issue.
same symptom occurred in windows10 enterprise ltsb 2016.
In my case, only TcpKeepAliveRetryCount was the problem.
I am using the version with only that option removed in my work environment.
FYI, I work on pos and kiosk industry.

from supersimpletcp.

KimEoJin avatar KimEoJin commented on June 12, 2024

@jchristn I am also having the same problem.
It works fine on Windows 10.
But, If a client using the 'TcpKeepAliveRetryCount' option is Executed on Windows 7, an exception message "keepalives not supported on this platform, disabled" is output and the function is immediately disconnected.

Like the solution of @jwj15, 'TcpKeepAliveRetryCount' is applied only in Windows 10 version 1703 or later, and if applied before that, an exception seems to occur.
So it seems that the problem occurs in versions such as Windows 7 or windows10 enterprise ltsb 2016.

See link below.

  1. https://learn.microsoft.com/en-us/windows/win32/winsock/ipproto-tcp-socket-options#windows-support-for-ipproto_tcp-options:~:text=x-,TCP_KEEPCNT,Starting%20with%20Windows%C2%A010%2C%20version%201703,-TCP_MAXRT
  2. https://en.wikipedia.org/wiki/Windows_10,_version_1703

After applying the code below to the Local Clone Repo, the built dll was applied, and it was confirmed that it was built on Windows 7.

        private void EnableKeepalives()
        {
            // issues with definitions: https://github.com/dotnet/sdk/issues/14540

            try
            {
#if NETCOREAPP3_1_OR_GREATER || NET6_0_OR_GREATER

                // NETCOREAPP3_1_OR_GREATER catches .NET 5.0
                _client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
                _client.Client.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.TcpKeepAliveTime, _keepalive.TcpKeepAliveTime);
                _client.Client.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.TcpKeepAliveInterval, _keepalive.TcpKeepAliveInterval);

                // Windows 10 version 1703 or later
                if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
                    && Environment.OSVersion.Version >= new Version(10, 0, 15063))
                {
                    _client.Client.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.TcpKeepAliveRetryCount, _keepalive.TcpKeepAliveRetryCount);
                }

#elif NETFRAMEWORK

from supersimpletcp.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.