TCP服务器问题
做一个TCP服务器,逻辑与通信分别在不同的线程中(通信线程有多个),在用ping-pong测试(连接的一方收到的消息,直接返回)时出现了一个问题:
单个连接进入时,通信没有问题,但如果有第二个连接进入(会激活另一个通信线程),这时会发现通信的数据会乱掉(比如发送的数据有三条,比如“12345”、“678910”、“aaaaaaaaa”,可能在某个时刻会接收到一条“67891”的数据)。
经以调试,发现在服务器在往缓冲区里通信队列发送数据时,函数调用堆栈上(调用参数)显示有一条“67891”的数据,于是看了下数据来源,发现数据的来源是正确的,可调用堆栈上显示是错误的,
更诡异的是再使用bt看调用堆栈时,原来错误的数据又变成了正确的
有没有朋友遇到类似的问题,求解找这个BUG的思路!
gcc版本:4.4.4
内核版本:Linux CentOS 2.6.32
语言:C++
调用堆栈截图:
第一次打出的堆栈(红色是错误的值):
这是两次打出堆栈中间打印的数据来源:
第二次打出的堆栈(红色是变成了正确的值):
锁骨控頑駄無
12 years ago