我正在使用epoll在linux机器上的网络程序,我从gdb得到错误信息。SIGPIPE,破管
Program received signal SIGPIPE, Broken pipe.
[Switching to Thread 0x7ffff609a700 (LWP 19788)]
0x00007ffff7bcdb2d in write() from /lib/libpthread.so.0
(gdb)
(gdb) backtrace
#0 0x00007ffff7bcdb2d in write() from /lib/libpthread.so.0
#1 0x0000000000416bc8 in WorkHandler::workLoop()()
#2 0x0000000000416920 in WorkHandler::runWorkThread(void*)()
#3 0x00007ffff7bc6971 in start_thread() from /lib/libpthread.so.0
#4 0x00007ffff718392d in clone() from /lib/libc.so.6
#5 0x0000000000000000 in ??()
我的服务器正在进行n^2次计算,我试图用500个连接用户运行服务器。什么可能会导致此错误?我该如何解决这个问题?
while(1){
if(remainLength >= MAX_LENGTH)
currentSentLength = write(client->getFd(), sBuffer, MAX_LENGTH);
else
currentSentLength = write(client->getFd(), sBuffer, remainLength);
if(currentSentLength == -1){
log("WorkHandler::workLoop, connection has been lost \n");
break;
}
sBuffer += currentSentLength;
remainLength -= currentSentLength;
if(remainLength == 0)
break;
}
当您尝试写入已关闭的管道时,发生SIGPIPE,请确保您写入的管道未关闭。 –
发布您的代码。 – 2011-07-26 01:23:48
作为答案发布,所以我们可以upvote它。这个问题的答案尽可能多,因为问题的信息很少。 @LCYSoft:GDB跟踪在没有调用函数的代码时是没用的。 –