Es ist keine absolute Regel auf allen UNIX-Systemen. Einige haben Erweiterungen, mit denen mehrere Prozesse an dieselbe Adress- und Portkombination gebunden werden können. Der Kernel übernimmt dann die Verteilung eingehender Verbindungen an die mehreren Listener. Dies hat den Vorteil, dass Ihre Anwendung kein Multiplexing der Verbindungen selbst durchführen muss, sondern sich stattdessen um die Handhabung von Verbindungen kümmern muss, was Ihnen einen schnellen und sehr einfach zu implementierenden Mechanismus zur Verfügung stellt, um Parallelität im Netzwerkcode zu ermöglichen.
Unter Linux wird die Socket-Option dafür genannt SO_REUSEPORT
, und viele weit verbreitete Hochleistungs-Serversoftware (einschließlich Apache HTTPD und Nginx) unterstützt die Verwendung dieser Option.
Windows verwendet, da es einen weitgehend direkten Klon des 4.4BSD-Netzwerkcodes verwendet, das gleiche Konzept der Socket-Optionen und verfügt über eigene Optionen, um dies zu steuern. Gemäß dieser StackOverflow-Antwort wird die dort fragliche Option aufgerufen SO_REUSEADDR
, und es wird eine entsprechende 'Anti-Option' aufgerufen SO_EXCLUSIVEADDRUSE
.
Es ist erwähnenswert, dass nichts daran hindert, dass mehrere verschiedene Programme diese Option verwenden und an denselben Port binden. Dies kann beim Debuggen von Netzwerkproblemen zu Kopfschmerzen führen und ist auch ein wichtiger Sicherheitsaspekt.