winsock选择函数的堆栈溢出异常(0xC00000FD)

时间:2010-02-06 11:55:20

标签: c++ select winsock stack-overflow

我有一个使用winsock的应用程序。 I / O部分在另一个线程上处理。 我正在使用阻塞选择方法的套接字。 但重点是5-6小时后,我的应用程序在select函数行给出了0xC00000FD异常。

据我所知,当存在递归或非常大的局部变量时会发生此异常。但对我来说,情况都不是这样。

所以你知道为什么我会得到这个例外吗? 或者任何想要发现实际导致异常的想法?

非常感谢

编辑2:

亲爱的所有人,我很抱歉,但由于复制案件需要很长时间,我才意识到这并没有解决问题。 当select函数行发生堆栈溢出异常时,一切似乎都正常。

我的意思是它是一个连接了一个客户端的服务器套接字。所以rset中有2个套接字,wset中有1个套接字。选择后,我正在检查所有准备好的套接字并进行必要,读,写,接受。超时为250毫秒。你认为这可能是问题吗?我不希望这个函数被阻塞,所以它不是null。但是,如果我使用{0,0}

,那将会是什么区别

一个重要提示是: 当客户端套接字没有发送任何数据时,相同的代码工作没有任何问题。 但是,当我开始从客户端向服务器发送一些数据时,出现了这个问题。 我确信FD_SET和FD_CLR没有问题,我的意思是当客户端只发送1(服务器)套接字在rset中而1(客户端)在wset中时。

无论如何,我看了很多样本​​,但似乎没有区别。

请参阅下面的局部变量截图(我删除了可执行文件的名称,因为它是商业产品) http://img192.imageshack.us/img192/1948/stackoverflow.jpg

这是调用堆栈: ntdll.dll中!7c90df3a()
    [下面的框架可能不正确和/或缺失,没有为ntdll.dll加载符号]     mswsock.dll!71a53c9c()
    ntdll.dll中!7c90d26c()
    mswsock.dll!71a55f9f()
    mswsock.dll!71a55974()
    ws2_32.dll!71ab314f()

  

xyz.exe!vm_socket_select(vm_socket * hds = 0x04c1fb84,int nhd = 1,int掩码= 7)行230 + 0x1b字节C
      xyz.exe!ND :: nd_socket :: SocketThreadProc()第173行+ 0x12字节C ++
      xyz.exe!ND :: nd_socket :: ThreadRoutineStarter(void * u = 0x07d63f90)Line 332 C ++
      xyz.exe!_callthreadstartex()第348行+ 0x6字节C
      xyz.exe!_threadstartex(void * ptd = 0x011a3ce8)第326行+ 0x5字节C
      kernel32.dll!7c80b713()

我在等待任何建议。 非常感谢

1 个答案:

答案 0 :(得分:3)

您是否尝试过一段时间后在调试器中停止程序?然后看看它可能给你一个提示的堆栈。

递归并不意味着你的一个函数无休止地调用它,它不会更棘手,并且在它返回之前涉及多个层。