关于WSARecv在IOCP使用中程序崩溃的问题

    最近使用IOCP在搞一个服务器端程序,发现在release编出来的版本运行的时候,由于接收数据过快,出现程序崩溃,尽管release生成调试信息,但堆栈处于不可调试的状态。而debug情况下不出现这种情况。后来在网上,找了两天,试了两天。终于找到方法。

    原因是:WSARecv中的Overlap参数不能设置成局部变量,而由于我是在一个函数中定义了一个Overlap局部变量,当WSARecv返回以后,Overlap这个变量是失效了的,而WSARecv中Overlap传进去的是地址,IOCP在WSARecv返回以后,还需要继续使用这个参数,而由于局部变量失效,导致程序崩溃,对于没有碰到过类似问题的人来说非常痛苦(找不到bug所在和崩溃原因)。所以应该在程序运行过程中保持Overlap变量的有效性。

你可能感兴趣的:(关于WSARecv在IOCP使用中程序崩溃的问题)