connect () mit Unix-Domain-Socket und vollem Backlog

8

Wenn das Abhörprotokoll für STREAM Unix-Domain-Sockets voll ist, schlägt connect(2) auf den meisten Systemen mit ECONNREFUSED fehl. Es wäre vorzuziehen, EAGAIN zurückzugeben.

Die Argumentation ist, dass es sehr nützlich ist, zwischen den zwei Fällen von totem Socket (Knoten existiert im Dateisystem, aber kein Prozess hört mehr) und dem Fall von vollem Rückstand unterscheiden zu können. Ich bin auf dieses Problem gestoßen, als ich Linux-Software portierte, die Code hat, um tote Sockets zu bereinigen, aber es ist eine Sicherheitslücke, wenn der Code dazu verleitet werden kann, Sockets zu löschen, indem er sie mit Spam füllt.

Nur Linux gibt EAGAIN zurück; AIX, Solaris und Darwin folgen dem BSD-Verhalten (jeweils getestet).

POSIX listet EAGAIN nicht als möglichen Rückgabecode von connect () ( link ) auf ein Compliance-Problem hier sein.

Was ist der beste Weg, um jeden im Einklang mit Linux zu verändern? Ich könnte einen Fehlerbericht mit Oracle, Apple, einer FreeBSD-PR einreichen und es auf den Mailinglisten jeder Organisation austragen. Oder sollte ich jemanden in einem Normungsgremium (Austin-Gruppe) belästigen? Ist es sogar ratsam, hier zu versuchen, alle zu wechseln, obwohl der Vorteil klar ist?

    
Nicholas Wilson 07.10.2013, 09:23
quelle

0 Antworten

Tags und Links