0

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

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

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

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

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

在这里接受客户端连接后,他将其设置为非阻塞模式。有人评论说;

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

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

提前致谢

4

1 回答 1

1

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

于 2010-06-04T20:32:49.890 回答