繁体   English   中英

写入套接字时出现异常:无法将数据写入传输连接

[英]Exception when writing to socket: Unable to write data to transport connection

我正在使用C#中的套接字开发客户端服务器应用程序,这肯定是一个多线程应用程序,奇怪的是以下内容:

当远程客户端询问时,连接从一个线程关闭,在这个确切的时刻写操作会抛出此异常:

无法将数据写入传输连接:通过调用WSACancelblockingcall中断阻塞操作

实际上我每20分钟写64个字节,但奇怪的是每次连接关闭时抛出上述异常,这意味着写操作需要很长时间才能完成操作总是停止的操作通过连接关闭,这是网络堆栈中的一个问题吗?更奇怪的是,这个问题只发生在一个客户端,并且仍然发生了一个多星期,所以它不是暂时的。

有什么建议么? 这是硬件问题吗? 这是TCP协议问题吗? 任何人有类似的问题,并找到了解决方案?

编辑:

用于说明问题的伪代码:

第一个帖子:

while(true)
{
     if (some condition)
             close connection;
}

第二个帖子:

while(true)
{
      sleep for 20 minutes
      write(array of 64 bytes) //blocks for a very long period of time
}

其实我发现了这个问题:

NetwrokStreamwrite方法阻塞,直到它可以成功地将数据写入底层套接字缓冲区(尽管许多人不同意这一点,但实验证明它是正确的)。 当缓冲区变满时, write方法会阻塞,直到发送一些数据并且数据有空间写入缓冲区,但是当网络连接速度慢且出现问题或读取器缓慢读取数据时,缓冲区就会满了并长时间write方法块。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM