Winsock Select()函数给出了0xC00000FD异常

时间:2010-06-04 12:18:40

标签: select winsock winsock2

我有一个基于选择的服务器。套接字处于阻塞模式,但对于select()函数,我使用250 ms。超时。

基本上我的服务器只接受一个客户端并向该客户端发送数据。 如果我只是将数据从服务器发送到客户端,它可以正常工作数周。

但我意识到如果客户端在select()行3-4小时后将数据发送到服务器,则会产生堆栈溢出异常(0xC00000FD)。 我红了几十次MSDN页面的Select(),但没有提到与此有关。 我真的被卡住了。任何帮助将不胜感激。

顺便说一句,我在网上找到了例子;

http://tangentsoft.net/wskfaq/examples/basics/select-server.cpp

在接受客户端连接后,他将其设置为非阻塞模式。 并且评论说:

 // Mark the socket as non-blocking, for safety.

“安全”意味着什么? 所以你认为这是我的问题吗?因为在我的实现中,连接的是阻塞模式?

提前致谢

1 个答案:

答案 0 :(得分:1)

异常表示您的代码中存在错误。由于您正在获得堆栈溢出,因此您的代码中可能会有一个运行时间过长的递归循环,每次调用时会占用堆栈空间,直到不再有堆栈空间为止。在正常情况下,select()会在失败时返回错误代码,因此您必须在某处弄乱程序的内存以获得异常。