Unter gleichzeitiger Verwendung von accept () und select ()?
Ich habe ein ereignisgesteuertes Netzwerkserverprogramm. Dieses Programm akzeptiert Verbindungen von anderen Prozessen auf anderen Hosts. Möglicherweise gibt es viele kurzlebige Verbindungen von verschiedenen Ports auf derselben Remote-IP.
erzeit habe ich einwhile(1)
Schleife, die @ aufruaccept()
und erzeugt dann einen Thread, um die neue Verbindung zu verarbeiten. Jede Verbindung wird geschlossen, nachdem die Nachricht gelesen wurde. Auf der Gegenseite wird die Verbindung geschlossen, nachdem eine Nachricht gesendet wurde.
Ich möchte den Aufwand für das Einrichten und Trennen von Verbindungen durch Zwischenspeichern der offenen Socket-FDs verringern. Auf der Absenderseite ist dies einfach - ich schließe die Verbindungen einfach nicht und behalte sie bei.
uf der Empfängerseite ist es etwas schwieriger. Ich weiß, dass ich die von @ zurückgegebene FD speichern kanaccept()
in einer Struktur und lauschen Sie mit @ über alle diese Sockets auf Nachrichtpoll()
oderselect()
, aber ich möchte beide gleichzeitig über @ auf neue Verbindungen lauschaccept()
un Alle zwischengespeicherten Verbindungen abhören.
Wenn ich zwei Threads verwende, einen aufpoll()
und eins aufaccept()
, dann, wenn dasaccept()
call kehrt zurück (eine neue Verbindung wird geöffnet), ich muss den anderen Thread aufwecken, der auf den alten Satz von Verbindungen wartet. Ich weiß, dass ich das mit einem Signal und @ tun kapselect()
, aber dieses ganze Durcheinander scheint viel zu viel Arbeit für etwas so Einfaches zu sein.
Gibt es einen Anruf oder eine übergeordnete Methode, mit der ich gleichzeitig neue Verbindungen öffnen und Daten über alte Verbindungen senden kann?