winsock错误,有熟悉10055号错误代码的高手请进!

julien_lee 2001-07-19 09:45:37
我写了一个tcp client端程序,基于事件动态起线程。换句话说,一旦我定义的时间触发,就起一个线程,所有通讯工作在线程中完成(其实就是向远端的tcp server发包,然后等远端回一个确认信息,通讯即告结束,线程也到此结束)。程序不管是思路还是代码,都很简单,但是,实际运行起来,确有一个bug,就是当运行一段时间,(大概收发十几万个包左右吧),windows将整个停顿。就是说,除了按3个键调出任务管理器之类的底层事件还有反映之外,其他动作一概不相应。当然,更不用说同远端的通讯了。
查看日志,发现最后的错误代码是10055,msdn 中是这样解释的:
WSAENOBUFS
(10055)
No buffer space available.
An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.

什么意思呢?
请问有哪位仁兄曾经碰到过类似的错误代码?一齐分析一下原因。
...全文
140 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
clack 2001-07-20
  • 打赏
  • 举报
回复
你可以只用一个线程发包,不用每到一个timer就起一个线程,那样非常不好控制,很可能到后来创建了过多的线程耗尽系统资源(把发包的缓冲占满了)。用一个线程,让他在一个事件发生后才发包,其他时刻等待;事件的产生可以让另外一个线程定时去做,这样会很方便的。

davidprg 2001-07-20
  • 打赏
  • 举报
回复
不可能的,肯定是你的程序问题,我做过FTP程序(MultiFtp),是直接基于Ftp协议的作法,传输不管多大都一样的,不会出现你的问题;
julien_lee 2001-07-20
  • 打赏
  • 举报
回复
内存泄漏是绝对不存在的,我仔细检查过代码了。
死线程也绝对不存在,用windows 的任务管理器可以清楚的看到程序所占用的
线程数。

请问还有更好的解释吗?关键是有哪位仁兄曾经碰到过类似错误代码,可以一齐切磋一下。
plato 2001-07-20
  • 打赏
  • 举报
回复
windows停顿是因为你的程序不断消耗内存,没有释放。检查程序有没有内存未释放。
zb_china 2001-07-20
  • 打赏
  • 举报
回复
内存不足,检查你的所有动态创建资源的语句,申请的内存是否释放,线程是否只创建不退出,另外,动态创建大量线程会耗尽系统资源-----即使大多数线程已经结束,看来这是操作系统的问题,所以最好预先创建一定数量的线程,或根据需要创建线程,但线程循环使用,不要结束。我就是这样做的,主线程控制子线程的使用,子线程一经创建,决不退出(除非主线程发出结束命令)。子线程空闲时使用sleep等待。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧