我有一个用C#编写的代理服务器作为Windows服务运行。它侦听127.0.0.1:xxxxx,其中xxxxx可以是53500以上的端口范围。
代理工作得很好但有时某些端口停止响应,当我尝试telnet到它们时它表示请求超时或者没有响应。
我无法在我的开发区域重现此问题,但我认为这与在EndReceive之后不会调用BeginReceive的事情有关。以下引用来自一个关于我遇到的症状的帖子。
类似的问题是在使用异步通信时,有一个执行路径,一旦完成前一个EndReceive,就会调用BeginReceive。这使得套接字对远程端发送的所有其他数据一无所知。
有没有办法模拟端口停止响应的情况。我想写一些代码来检查端口是否在响应请求之前响应。如果它没有响应,我可以删除该端口上的侦听器并再次添加它。这是一个创可贴,可以防止代理崩溃,直到我能确定问题的原因。
我还添加了一些额外的日志记录来确定导致端口停止响应的原因。
答案 0 :(得分:0)
我正在暗中捅,但是代码包裹在try finally块中?
如果finally块是唯一一个你调用EndReceive的地方,它可能会消除你的问题。
try{
// processing code
}finally{
EndReceive()
BeginReceive()
}