我正在使用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跟蹤在沒有調用函數的代碼時是沒用的。 –