Ich arbeite an einem Netzwerkprogramm, das epoll auf einem Linux-Rechner verwendet, und ich habe die Fehlermeldung von gdb erhalten.
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 ?? ()
Mein Server führt n^2 Zeitberechnungen durch und ich habe versucht, den Server mit 500 verbundenen Benutzern auszuführen. Was könnte diesen Fehler verursachen? und wie behebe ich das?
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 tritt auf, wenn Sie versuchen, in eine geschlossene Pipe zu schreiben. Stellen Sie sicher, dass die Pipe, in die Sie schreiben, nicht geschlossen ist.
– Jesus Ramos
26. Juli 2011 um 1:21 Uhr
Poste das als Antwort, damit wir es positiv bewerten können. Es ist so viel Antwort wie möglich, wenn man bedenkt, wie wenig Informationen in der Frage enthalten sind. @LCYSoft: Der GDB-Trace ist ohne den Code für die aufgerufenen Funktionen nutzlos.
– Mike DeSimone
26. Juli 2011 um 1:25 Uhr
Nr. Post a Testfall. Wir werden jetzt Hunderte von nutzlosen Zeilen bekommen.
– Leichtigkeitsrennen im Orbit
26. Juli 2011 um 1:25 Uhr