SslStream.AuthenticateAsClient - 非阻塞套接字操作无法在发送时立即完成

SslStream.AuthenticateAsClient - A non-blocking socket operation could not be completed immediately on send

我目前正在尝试使用 TcpClient 连接到 FTP 服务器。 为了使用 FTPS 作为协议,我将 NetworkStream 处理为一个单独的方法,该方法使用该方法创建 SslStream 然后 SslStream.AuthenticateAsClient 被调用并抛出异常 发送时无法立即完成非阻塞套接字操作 。实际流由 TcpClient.GetStream 方法初始化。 实际上源代码来自 Biko 库,您可以在这里找到该部分:https://biko.codeplex.com/SourceControl/latest#Biko/Starksoft%20Biko/Net/Ftp/FtpBase.cs

private Stream CreateSslStream(Stream stream)
    {
        // create an SSL or TLS stream that will close the client's stream
        SslStream ssl = new SslStream(stream, true, new RemoteCertificateValidationCallback(secureStream_ValidateServerCertificate), null);

        // choose the protocol
        SslProtocols protocol = SslProtocols.None;
        switch (_securityProtocol)
        {
            case FtpSecurityProtocol.Tls1OrSsl3Explicit:
            case FtpSecurityProtocol.Tls1OrSsl3Implicit:
                protocol = SslProtocols.Default;
                break;
            case FtpSecurityProtocol.Ssl2Explicit:
            case FtpSecurityProtocol.Ssl2Implicit:
                protocol = SslProtocols.Ssl2;
                break;
            case FtpSecurityProtocol.Ssl3Explicit:
            case FtpSecurityProtocol.Ssl3Implicit:
                protocol = SslProtocols.Ssl3;
                break;
            case FtpSecurityProtocol.Tls1Explicit:
            case FtpSecurityProtocol.Tls1Implicit:
                protocol = SslProtocols.Tls;
                break;
            default:
                throw new FtpSecureConnectionException(String.Format("unexpected FtpSecurityProtocol type '{0}'", _securityProtocol.ToString()));
        }

        // note: the server name must match the name on the server certificate.
        try
        {
            // authenticate the client
            ssl.AuthenticateAsClient(_host, _clientCertificates, protocol, true);
        }
        catch (AuthenticationException authEx)
        {
            throw new FtpAuthenticationException("Secure FTP session certificate authentication failed.", authEx);
        }

        return ssl;
    }

所以,我的问题是,我如何修改源代码以便不再抛出此异常?我无法删除身份验证,但错误也应该消失。是什么原因导致此错误?

提前致谢。

已修复。 我刚刚更新到更新版本的库。该问题是由作者通过添加lock-关键字解决的线程问题引起的。