次の記事では、ソケットの so_reuseport と so_reuseaddr の違いについて詳しく説明します。これは参考になるものであり、皆さんのお役に立てれば幸いです。一緒に見てみましょう
Socket の基本的な背景
これら 2 つのオプションの違いについて議論するとき、知っておく必要があるのは、BSD 実装がすべてのソケット実装の起源であるということです。基本的に他のすべてのシステムは、BSD ソケット実装 (または少なくともそのインターフェイス) をある程度参照し、その後独自の進化を開始しました。明らかに、BSD 自体は時間の経過とともに常に進化し、変化しています。したがって、後で BSD を参照するシステムには、以前に BSD を参照するシステムよりも多くの機能があります。したがって、BSD ソケット実装を理解することは、他のソケット実装を理解するための基礎となります。 BSD ソケットの実装を分析してみましょう。
その前に、まず TCP/UDP 接続を一意に識別する方法を理解する必要があります。 TCP/UDP は、次の 5 つのタプルによって一意に識別されます:
{<protocol>, <src addr>, <src port>, <dest addr>, <dest port>}
これらの値の一意の組み合わせにより、接続を一意に識別します。したがって、どのような接続においても、これら 5 つの値がまったく同じになることはありません。そうしないと、オペレーティング システムがこれらの接続を区別できなくなります。
ソケットのプロトコルは、socket()で初期化されるときに設定されます。送信元アドレスと送信元ポートは、bind() を呼び出すときに設定されます。宛先アドレスと宛先ポートは、connect() を呼び出すときに設定されます。 UDP はコネクションレス型であり、宛先ポートに接続しなくても UDP ソケットを使用できます。ただし、場合によっては、宛先アドレスとポートで接続を確立した後、UDP を使用することもできます。コネクションレス UDP を使用してデータを送信する場合、bind() が明示的に呼び出されない場合、初めてデータを送信するときに、システムは自動的に UDP ソケットをローカル アドレスと特定のポートにバインドします (そうしないと、プログラムは、によって応答されたデータを受け入れることができません)リモートホスト)。同様に、バインドされたアドレスのない TCP ソケットは、接続が確立されると自動的にローカル アドレスとポートにバインドされます。
ポートを手動でバインドする場合、ソケットをポート 0 にバインドできます。ポート 0 にバインドするということは、使用するポートをシステムに決定させることを意味します (通常は、事前に範囲が決定されたオペレーティング システム固有のポート番号のセットから)。任意のポートを意味します。同様に、ワイルドカードを使用して、どの送信元アドレスをバインドするかをシステムに決定させることもできます (ipv4 ワイルドカードは 0.0.0.0、ipv6 ワイルドカードは::)。ポートとは異なり、ソケットはホスト上のすべてのインターフェイスに対応する任意のアドレスにバインドできます。このソケットに接続されている宛先アドレスとルーティング テーブル内の対応する情報に基づいて、オペレーティング システムはこのソケットをバインドする適切なアドレスを選択し、このアドレスを使用して以前のワイルドカード IP アドレスを置き換えます。
デフォルトでは、2 つのソケットを同じ送信元アドレスと送信元ポートの組み合わせにバインドすることはできません。たとえば、socketA をアドレス A:X にバインドし、socketB をアドレス B:Y にバインドします。ここで、A と B は IP アドレス、X と Y はポートです。したがって、A==B の場合は X!=Y が満たされ、X==Y の場合は A!=B が満たされる必要があります。特定のソケットがワイルドカード IP アドレスにバインドされている場合、実際にはローカル マシンのすべての IP がシステムによってそのソケットにバインドされているとみなされることに注意してください。たとえば、ソケットは 0.0.0.0:21 にバインドされます。この場合、どの特定の IP アドレスが選択されても、他のソケットはポート 21 にバインドできなくなります。ワイルドカード IP0.0.0.0 はすべてのローカル IP と競合するためです。
上記はすべて、主要なオペレーティング システム間で基本的に同じです。各 SO_REUSEADDR は異なる意味を持ちます。まず、BSD 実装について説明します。 BSD は他のすべてのソケット実装メソッドのソースだからです。
BSD
SO_REUSEADDR
特定のアドレスとポートにバインドする前にソケットの SO_REUSEADDR 属性が設定されている場合、そのソケットがまったく同じソースアドレスに別のソケットにバインドしようとしない限り、それ以外の場合、ソケットはこのアドレス ポートのペアを正常にバインドできます。これは以前と同じように聞こえるかもしれません。しかし、そこにあるキーワードは完成しています。 SO_REUSEADDR は主に、システムがワイルドカード IP アドレスの競合を処理する方法を変更します。
SO_REUSEADDR が使用されていない場合、socketA を 0.0.0.0:21 にバインドすると、ローカル マシン上の他のソケットのポート 21 へのバインド (192.168.1.1:21 へのバインドなど) によって EADDRINUSE エラーが発生します。 0.0.0.0 はワイルドカード IP アドレス、つまり任意の IP アドレスを意味するため、このマシン上の他の IP アドレスはシステムによって占有されているとみなされます。 SO_REUSEADDR オプションが設定されている場合、0.0.0.0:21 と 192.168.1.1:21 はまったく同じアドレス ポート ペアではないため (そのうちの 1 つはワイルドカード IP アドレスで、もう 1 つはローカル マシンの特定の IP アドレスです)、このような結合は間違いなく成功することができます。ソケット A とソケット B が初期化される順序に関係なく、SO_REUSEADDR が設定されている限りバインディングは成功しますが、SO_REUSEADDR が設定されていない限りバインディングは成功しないことに注意してください。
以下の表は、考えられるいくつかのシナリオとその結果を示しています。 68 .1.1:21192.168.1.1:21
エラー (EADDRINUSE)
10.0.1.1:21 | OK | オン/オフ | |
---|---|---|---|
OK | オフ | 192.168.1.1:21 | |
エラー(EADDRINUSE) | オフ | 0.0.0.0:21 | |
エラー(耳鳴り) | ON | 192.168.1.1:21 | |
OK | ON | 0.0.0.0:21 | |
OK | オン/オフ | 0.0.0.0: 21 | |
OK |
以上がソケットの so_reuseport と so_reuseaddr の違いについて詳しく説明しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Arraysinpython、特にvianumpy、arecrucialinscientificComputing fortheirefficienty andversitility.1)彼らは、fornumericaloperations、data analysis、andmachinelearning.2)numpy'simplementation incensuresfasteroperationsthanpasteroperations.3)arayableminablecickick

Pyenv、Venv、およびAnacondaを使用して、さまざまなPythonバージョンを管理できます。 1)Pyenvを使用して、複数のPythonバージョンを管理します。Pyenvをインストールし、グローバルバージョンとローカルバージョンを設定します。 2)VENVを使用して仮想環境を作成して、プロジェクトの依存関係を分離します。 3)Anacondaを使用して、データサイエンスプロジェクトでPythonバージョンを管理します。 4)システムレベルのタスク用にシステムPythonを保持します。これらのツールと戦略を通じて、Pythonのさまざまなバージョンを効果的に管理して、プロジェクトのスムーズな実行を確保できます。

numpyarrayshaveveraladvantages-averstandardpythonarrays:1)thealmuchfasterduetocベースのインプレンテーション、2)アレモレメモリ効率、特にlargedatasets、および3)それらは、拡散化された、構造化された形成術科療法、

パフォーマンスに対する配列の均一性の影響は二重です。1)均一性により、コンパイラはメモリアクセスを最適化し、パフォーマンスを改善できます。 2)しかし、タイプの多様性を制限し、それが非効率につながる可能性があります。要するに、適切なデータ構造を選択することが重要です。

craftexecutablepythonscripts、次のようになります

numpyarraysarasarebetterfornumeroperations andmulti-dimensionaldata、whilethearraymoduleissuitable forbasic、1)numpyexcelsinperformance and forlargedatasentassandcomplexoperations.2)thearraymuremememory-effictientivearientfa

NumPyArraySareBetterforHeavyNumericalComputing、whilethearrayarayismoreSuitableformemory-constrainedprojectswithsimpledatatypes.1)numpyarraysofferarays andatiledance andpeperancedatasandatassandcomplexoperations.2)thearraymoduleisuleiseightweightandmemememe-ef

ctypesallowsinging andmanipulatingc-stylearraysinpython.1)usectypestointerfacewithclibrariesforperformance.2)createc-stylearraysfornumericalcomputations.3)passarraystocfunctions foreffientientoperations.how、how、becuutiousmorymanagemation、performanceo


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

WebStorm Mac版
便利なJavaScript開発ツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ホットトピック









