Wie reserviere ich eine Liste von Ports für meine benutzerdefinierten Anwendungen?
Um genau zu sein, das Produkt, das ich erstelle, hat viele Prozesse und eine Menge Interkommunikation zwischen ihnen.
Das Problem, das ich habe, ist, dass das Betriebssystem von Zeit zu Zeit meine Ports stiehlt. Es ist selten, aber es passiert.
Dies kann daran liegen, dass eine andere Anwendung ":: bind" verwendet hat, ohne dass ein Port angegeben wurde.
Oder manchmal stehlen meine eigenen Anwendungen den Port, wenn ich ":: connect" mit einem ungebundenen Socket aufrufe. Wie aus der Manpage ersichtlich:
Wenn der Socket noch nicht an eine lokale Adresse gebunden wurde, bindet connect () ihn an eine Adresse, die, sofern die Adressfamilie des Sockets nicht AF_UNIX ist, eine nicht verwendete lokale Adresse ist.
Meine Frage ist also, kann ich die benötigten Ports reservieren, damit das Betriebssystem sie nicht verwendet? Kann dies mit / etc / services erreicht werden? Oder gibt es einen anderen Weg?
SELinux
Durchsetzungsmodus Ihre Anforderungen erfüllen kann. Ich lerne immer noch dazu. Also nur eine Vermutung, vielleicht können Sie Ihre eigene Richtlinie definieren, um Ihre Ports SELinux
zu reservieren , wie z my_server_port_t tcp 1111, 2222, 3333, 4444-4600
. Wenn Ihre Anwendung überall ausgeführt wird (keine Serveranwendung), können Sie leider nicht steuern, ob sie SELinux
aktiviert oder deaktiviert ist.