Async verbinden und trennen mit epoll (Linux)

Ich brauche async verbinden und trennen für die tcp-client mit epoll unter Linux. Es gibt ext. Funktionen in Windows, wie ConnectEx, DisconnectEx, AcceptEx, etc...
Im tcp-server-standard accept-Funktion funktioniert, aber im tcp-client nicht arbeiten verbinden und trennen... Alle Steckdosen sind ungeblockt.

Wie kann ich dies tun?

Dank!

  • Das könnte dir helfen : stackoverflow.com/questions/2875002/...
  • Als eine mögliche alternative zu den Kommentaren auf der verlinkten HÜLSE Seite, möchte ich vorschlagen, versucht zu dup und close den Deskriptor (und verwenden Sie das doppelte). Nicht getestet, aber es sollte funktionieren, in meinem Verständnis. Die docs sagen, es ist ein schwerer Fehler bei der Programmierung nicht auf überprüfen Sie den Rückgabewert von close, weil es zurückgeben kann einem vorherigen Fehler. Das ist genau das, was Sie wollen (wenn close einen Fehler, dann connect fehlgeschlagen). Obwohl natürlich, wenn Sie epoll dann bist du garantiert noch ein OS wo getsockopt(SO_ERROR) wird nur Arbeit...
  • Wenn lebensfähig, die einfachste Möglichkeit ist zu warten, bis nach dem connect() zurück, bevor Sie NON_BLOCK.
  • Nicht asynchron, es sei denn, Sie verwenden einen worker-thread, aber ich Stimme die Einfachheit ist verführerisch. Plus, DNS-resolve--, die Sie wahrscheinlich brauchen-benötigen einen worker-thread sowieso, es sei denn, Sie blockieren möchten auf diesem (getattrinfo_a nicht nur, dass intern auch). So, während Sie block in der Arbeiter-wie auch immer, Sie können auch blockieren, verbinden, zu...
  • Ich habe 1 Arbeit-thread für alle meine Bedürfnisse (tcp server/client, udp-socket, timerfd). In diesem thread bin ich mit epoll für asynchrone Arbeit. Also ich warte auf epoll_wait(...) und dann tun, was ich brauche. Zumbeispiel: wenn socket listening socket - ich call-accept-Funktion, erstellen Sie neue client mit diesem sockel, und fügen Sie es epoll Warteschlange. Aber in der tcpclient - kann ich nicht hinzufügen, es zu epoll, bevor die Verbindung geschehen ist... Und wenn ich das mache - client eine Verbindung mehrmals (3-4)...
InformationsquelleAutor Alexander | 2012-04-17
Schreibe einen Kommentar