Beschreiben Sie kurz die Auslösezeit von EPOLLOUT und EPOLLIN im Linux Epoll ET-Modus

Der ET-Modus wird als Kantentriggermodus bezeichnet. Wie der Name schon sagt, wird er nur dann ausgelöst, wenn es sich um einen Kantenfall handelt.

EPOLLOUT-Ereignis:
Das EPOLLOUT-Ereignis wird beim Herstellen einer Verbindung nur einmal ausgelöst und zeigt an, dass es beschreibbar ist. Wenn Sie es zu anderen Zeiten auslösen möchten, müssen Sie zunächst die folgenden Bedingungen vorbereiten: 1.
Ein bestimmter Schreibvorgang, der Sendepuffer ist voll und Der zurückgegebene Fehlercode ist EAGAIN.
2. Der Peer liest einige Daten und ist wieder beschreibbar. Zu diesem Zeitpunkt wird EPOLLOUT ausgelöst.
Um es einfach auszudrücken: Das EPOLLOUT-Ereignis wird nur einmal im Moment des Übergangs von nicht beschreibbar zu beschreibbar ausgelöst, daher wird es Edge-Trigger genannt, was richtig ist!

Wenn Sie einen Auslöser wirklich einmal erzwingen möchten, gibt es tatsächlich eine Möglichkeit. Rufen Sie einfach epoll_ctl auf, um das Ereignis zurückzusetzen. Das Ereignis entspricht genau der ursprünglichen Einstellung (muss jedoch EPOLLOUT enthalten). Der Schlüssel liegt darin, es zurückzusetzen löst sofort ein EPOLLOUT-Ereignis aus.

EPOLLIN-Ereignis:
Das EPOLLIN-Ereignis wird nur ausgelöst, wenn Daten an das andere Ende geschrieben werden. Daher ist es nach einmaligem Auslösen erforderlich, alle Daten kontinuierlich zu lesen, bis EAGAIN gelesen wird. Andernfalls können die verbleibenden Daten nur dann zusammen entnommen werden, wenn das Peer-Ende das nächste Mal schreibt.
Verstehen Sie nun, warum Epoll einen asynchronen Socket benötigen muss? Wenn der Socket synchronisiert ist und alle Daten gelesen werden müssen, werden sie möglicherweise im Block blockiert.

Guess you like

Origin blog.csdn.net/psq1508690245/article/details/118052554