Ich benutze Epoll, um große Nachrichten an einen Server mit HTTP-Protokoll zu schreiben. Die FDS sind alle auf nicht blockierend eingestellt und ich verwende flankengetriggerte Ereignisse. Ich weiß für EPOLLIN ich muss Schleife über das Lesen der Fd, bis EAGAIN zurückgegeben wird. Zum Schreiben bin ich unsicher, ob ich weitermachen soll, sobald ich EAGAIN bekomme, oder ob ich warten soll, bis epoll benachrichtigt, wenn das fd wieder verfügbar ist.epoll Verhalten beim Schreiben in einen Dateideskriptor
Zum Beispiel schreibe ich eine 20K-Nachricht, und beim ersten :: write Versuch die Menge der gesendeten Daten = 13K. Der nächste Schreibversuch liefert retVal = -1 und errno = EAGAIN.
An dieser Stelle sollte ich eine Weile weiterschleifen (1), bis ich die Daten schreiben kann oder sollte ich warten, dass Epoll meinen Aufruf zurück ruft, wenn die FD wieder zum Schreiben bereit ist. Mein Verständnis ist, dass, da die FD zum Schreiben registriert ist, Epoll mich benachrichtigen sollte, wenn die FD wieder zum Schreiben bereit ist. Aber das scheint in meinem Programm nicht zu passieren.
Muss ich ein spezielles Flag setzen oder die FD ändern, um die Benachrichtigung zu erhalten?
James, danke für die Antwort. Ich hatte einen Fehler im Code - deshalb erhielt ich keine EPOLLET-Ereignisse auf dem fd, sobald es wieder zum Schreiben verfügbar war. Es funktioniert jetzt wie erwartet. – user1290156