我正在做一个插座上以下BeginReceive电话:如果套接字仍然连接,EndReceive是否会返回零?
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可以返回零?
检查了这一点。 http://stackoverflow.com/questions/3970825/when-does-endreceive-return-zero-bytes 看来除了3种情况之外,它会返回0. – 2014-11-04 17:05:13
列维,我已经看到了那篇文章。这与我所问的问题并无关系。我具体询问EndReceive的返回值,如果返回值为零意味着套接字上不会有更多数据可用。 – bpeikes 2014-11-04 18:08:03