【问题标题】:Winsock Select() function gives 0xC00000FD exceptionWinsock Select() 函数给出 0xC00000FD 异常
【发布时间】:2010-06-04 12:18:40
【问题描述】:

我有一个基于选择的服务器。套接字处于阻塞模式,但对于 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.

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

提前致谢

【问题讨论】:

    标签: select winsock winsock2


    【解决方案1】:

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

    【讨论】:

    • 嗨雷米,感谢您的回复。但问题是有一个循环使用 select() 调用进行轮询。所以没有递归函数调用。如果客户端不发送任何数据,则完全没有问题。但如果它发送数据,4-5 小时后它会在 select() 函数处出现缓冲区溢出。如果有帮助,我可以发布伪代码?
    • 那么您不太可能遇到堆栈溢出。缓冲区溢出是完全不同的东西。不过,这听起来确实像是您对代码的管理不当。所以是的,请显示一些实际代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    相关资源
    最近更新 更多