什么会导致UDP套接字上的ConnectionReset?

什么会导致UDP套接字上的ConnectionReset?

问题描述:

我正在尝试使用Managed Media Aggregation C#库(http://net7mma.codeplex.com)处理来自Freebox机顶盒的RTSP/RTP流。什么会导致UDP套接字上的ConnectionReset?

尽管lib可以在示例RTSP提要中正常工作,但在使用来自机顶盒的提要时,RTP侦听器套接字(侦听特定端口上的每个收入的简单UDP套接字)将抛出SocketException:ConnectionReset,并且当然没有数据显示,而接收 (数据显示在Wireshark中)。

通过SocketIO技巧抑制E_CONNRESET并不多,仍然没有数据进入套接字。

什么会导致这样的行为?

(I可以提供源或Wireshark的必要时迹线)

+0

如何通过UDP等无连接协议连接? http://en.wikipedia.org/wiki/Connectionless_communication – Aubin 2013-03-05 16:58:37

+0

那么这就是为什么我试图压制ConnectionReset首先,它只是没有任何意义(请参阅:http://*.com/questions/10332630/connection-reset- on-receiving-packet-in-udp-server) 但我怀疑这是一个小故障,表示winsock的低级失败,这将导致我没有收到任何数据的原因。 – pleasereset 2013-03-05 17:40:33

Microsoft explain SIO_UDP_CONNRESET的真正含义:

SIO_UDP_CONNRESET(操作码设定:I,T == 3)

Windows XP: Controls whether UDP PORT_UNREACHABLE messages are reported. 
- Set to TRUE to enable reporting. 
- Set to FALSE to disable reporting. 

问题实际上是未连接重置但是可达性

MSDN explain错误WSAECONNRESET:

WSAECONNRESET

的虚电路是通过执行硬或 流产靠近远程端复位。应用程序应关闭套接字;它不是 可用时间更长。 在UDP数据报套接字上,此错误指示 以前的发送操作导致ICMP端口无法到达消息

我是net7mma的作者。

我非常感谢你的帮助,试图解决这个问题。

WinSock或Windows Networking Stack的其他部分可能存在一个错误。我会很有兴趣听到这是否也发生在单声道。

但是,基于与OP进行的某些对话之后,似乎正在发生的原因是,Freebox正在将端口上的数据包发送到与描述请求中不同的端口。

当我在我的项目页面上得到一个机会时,我会发布一些信息,但同时我想确保人们搜索这个和Freebox获得最好的信息。

RtpClient -> RecieveData

变化:

received = socket.Receive(m_Buffer, received, Math.Min(socket.Available, m_Buffer.Length), SocketFlags.None, out error); 

var tc = GetContextBySocketHandle(socket.Handle); 
EndPoint fbRtp = new IPEndPoint(tc.RemoteRtp.Address, 0);//Any port 
received = socket.ReceiveFrom(m_Buffer, SocketFlags.None, ref fbRtp); 

这应该让你的插座接受任何端口上由于STB不正确报告RTP或RTCP端口,如果你有多于1个客户端并且你决定使用这个代码,因为你可能无意中从另一个流接收数据包,或者即使你只是使用单个客户端同一个流的Rtcp端口可能会无意中偷偷接收此包中的数据包。

如果这个工作正常,最好的方法是从RtspClient和RtpClient派生出一个FreeboxRtspClient和FreeboxRtpClient,它可以很好地处理这个问题。

如果有人可以找到一个押韵的原因,为什么箱子在不同的端口上发送数据包,我很乐意在当前实现中进行更改,因此不需要派生。

以下附件:http://net7mma.codeplex.com/workitem/16024

您可以找到PCAP捕获这说明整个谈话。

-Jay

+0

似乎有人在取得进展,但也找不到为什么会出现这种疯狂的方法。 https://net7mma.codeplex.com/discussions/436758 我发布了我的0.0.2美元,希望Freebox最终可以解决这个问题,使他们的执行标准投诉。 – Jay 2013-03-17 18:54:14