【发布时间】:2014-11-04 17:01:24
【问题描述】:
我正在对套接字进行以下 BeginReceive 调用:
m_socket.BeginReceive(m_buffer, 0, m_buffer.Length, SocketFlags.Partial, this.ReceiveCallback, null);
在我的班级ReceiveCallback 我调用的函数
try {
int bytesReadFromSocket = m_socket.EndReceive(ar);
if(bytesReadFromSocket > 0) {
// Do some processing
}
}
finally {
if(m_socket.Connected) m_socket.BeginReceive(m_buffer, 0, m_buffer.Length, SocketFlags.Partial, this.ReceiveCallback, null);
}
我遇到的问题是 EndReceive 返回零,但 m_socket.Connected 返回 true,所以我再次调用 BeginReceive。这发生在一个永远不会停止的紧密循环中。从文档中不清楚 EndReceive 何时返回零。我认为它仅在套接字关闭时发生,但这似乎不是真的。
那么问题来了,EndReceive 在什么情况下可以返回零?
【问题讨论】:
-
看看这个。 stackoverflow.com/questions/3970825/… 好像除了这3种情况,它会返回0。
-
Levi,我已经看过那篇文章了。这与我要问的问题无关。我特别询问 EndReceive 的返回值,如果返回值为零意味着套接字上没有更多可用数据。
标签: c# sockets asynchronous