之前一直在win7平台做开发,因为项目需要,把代码转到win10上运行,发现有错误.
于是自己装了一台win10在本地调试代码,发现一个奇怪的问题.
代码如下:
for (size_t i = 0; i < n重连次数; i++)
{
Sleep(1000);
LONG retSend = Send(sock, &bufInfo);
if (retSend <= 0)
{
g_Client.Connect(g_strIP, g_nPort);
sock = g_Client.m_Socket;
continue;
}
break;
}
就是这么简单的一段代码,在win7平台调试和生成运行都没有问题,但是放在win10就出问题.
返回值 retSend 接收的是发送数据的长度.
我在win10环境下 下个断点,断点位置在LONG retSend = Send(sock, &bufInfo);这段代码处,
发现当Send函数执行完毕后,retSend接收的结果依然是0,(哪怕数据发送成功,并且长度是100,并且正确返回,但是retSend在断点位置,以及断点F10向下走下一条,依然是0)
接着断点走入 if (retSend <= 0) 代码块里面,
奇怪的现象出现了,如果说retSend的结果是0,那么继续向下走,也就罢了,
最关键的是,它在这里突然又变成了正确的值,比如retSend=100了.
程序本来在这个代码块中运行这,结果没有走到结尾,突然就又跳了回去
也就是说直接走到break;这里,跳出循环了.
这个问题困扰我两天了,在这里跪求大神解答.
这段代码在win7环境下测试几年都没有问题的,但是在win10就是不行,不知道是编译器原因还是win10做了某些优化
Send(sock, &bufInfo);此函数是自己封装的发包函数,里面有一些数据压缩加密,然后就是调用send将数据发送出去.
在Send()里面,返回值是正确的,但是在这段代码中,retSend接收到的结果却没有即时被复制,直到进入错误处理代码块中突然变好又跳了出去.
如果没有下调试断点,那么它就不会break,一直在错误处理代码中循环完毕才结束.