gpt4 book ai didi

C# TCP Socket "Blocking"属性不一致

转载 作者:可可西里 更新时间:2023-11-01 02:53:02 24 4
gpt4 key购买 nike

我通过以下方式使用 tcp 套接字:

m_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);m_socket.ReceiveTimeout = 15;

一般流程是我在无限循环中运行 m_socket.Receive,在某个时候套接字会长时间变空,但我不想关闭它。相反,我想每 15 秒继续尝试读取和超时异常。

发生的事情是,在第一次套接字变空时,我在 15 秒后如预期的那样收到超时套接字异常。然后,因为我仍在循环中,再次调用 m_socket.Receive - 但是这次无法完成非阻塞套接字操作异常被抛出(这不是我所期望的,它应该再阻塞 15 秒) 即使当我查询 m_socket.Blocking 上面的一行时,它说 TRUE。

有趣的是,如果我执行 m_socket.Blocking = true;就在 m_socket.Receive 之前,一切都按预期运行(每 15 秒仅抛出超时异常)。

唯一可能的解释是超时异常以某种方式改变了接收操作或一般的套接字操作以非阻塞方式工作,同时没有相应地改变“阻塞”属性。

最佳答案

我找到了 this

显然,在 .NET 4.0 中修复了与此问题相关的错误

关于C# TCP Socket "Blocking"属性不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3460203/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com