Ist es möglich (und sicher), einen akzeptierenden Socket blockierungsfrei zu machen?

Ich suche nach einem Weg, um einen zu unterbrechenaccept() Rufen Sie eine blockierende Steckdose an. Die Verwendung von Signalen ist keine Option, da dies in einer Bibliothek vorgesehen ist und ich die Benutzersignale nicht überladen möchte. Verwendenselect() ist eine andere Option, buf aus verschiedenen Gründen ist es in meinem Fall nicht sehr ansprechend.

Wenn möglich, wäre es gut, die Buchse in den nicht blockierenden Modus zu versetzen (mitfcntl() undO_NONBLOCK) von einem anderen Thread, während der Socket auf einem blockiert istaccept() Anruf. Das erwartete Verhalten ist, dass dieaccept() Anruf wird mit zurückgegebenEAGAIN oderEWOULDBLOCK imerrno.

Würde es in der Tat so funktionieren? Ist es sicher? Tragbar?

Wenn Sie wissen, ob diese Methode auf Windows anwendbar ist (wo Sie sie verwenden müssen)WSAIoctl() undFONBIO) Interessiert mich auch.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage