[解決済み] ソケットプログラミングのためのINADDR_ANYの理解
質問
私はいくつかのソケットをプログラムしようとしているので、サーバー側で
htonl(INADDR_ANY)
. 私が理解した範囲では、この関数はランダムなIPを生成しているようです(私は正しいですか)。実際、私は私のソケットを私の
localhost
. しかし、私はこれを実行すると
printf("%d",htonl(INADDR_ANY));
戻り値として0が返ってきます。どなたか解説をお願いします。
解決方法は?
-
bind()
のINADDR_ANY
する NOT "ランダムなIPを生成する"。それは ソケットを利用可能なすべてのインターフェースにバインドする . -
サーバーの場合、通常、"localhost" だけでなく、すべてのインターフェイスにバインドしたいと思うでしょう。
-
ソケットをlocalhostにのみバインドしたい場合は、次のような構文になります。
my_sockaddress.sin_addr.s_addr = inet_addr("127.0.0.1");
を呼び出すとbind(my_socket, (SOCKADDR *) &my_sockaddr, ...)
. -
たまたまです。
INADDR_ANY
は、たまたま"zero"に等しい定数です。http://www.castaglia.org/proftpd/doc/devel-guide/src/include/inet.h.html
# define INADDR_ANY ((unsigned long int) 0x00000000) ... # define INADDR_NONE 0xffffffff ... # define INPORT_ANY 0 ...
-
もしまだよく知らないなら、Beej's Guide to Sockets Programmingをぜひチェックしてみてください。
まだこれを読んでいる人がいるので、追加メモ。
男 (7) ip :
あるプロセスが新しい着信パケットや接続を受け取りたいとき。 を使用して、ローカル・インターフェイス・アドレスにソケットをバインドする必要があります。 バインド(2) .
この場合、1つのIPソケットを任意のローカル (アドレス、ポート)のペアを使用します。 バインドコールにINADDR_ANYが指定された場合。 ソケットはすべてのローカルインターフェイスにバインドされます。
という場合 リッスン(2) が呼び出されると、そのソケットは 自動的にランダムな空きポートにバインドされ、ローカルアドレスは を INADDR_ANY に設定します。
いつ 接続(2) を呼び出すと、そのソケットは 自動的にランダムな空きポートまたは使用可能な共有ポートにバインドされます。 ローカルアドレスをINADDR_ANYに設定し...
特殊なアドレスがいくつかあります。inaddr_loopback (127.0.0.1) は常にループバックデバイスを経由してローカルホストを参照し、INADDR_ANY (0.0.0.0)はバインディングのための任意のアドレスという意味です...
また
(sin_addr.s_addr)フィールドに定数INADDR_ANYを設定すると netinet/in.hで定義されているように、呼び出し元はソケットの作成を要求しています。 をホスト上のすべてのネットワークインタフェースにバインドする。その後、UDPパケット バインドされた名前に一致する)すべてのインターフェイスからの はアプリケーションにルーティングされます。これは、サーバーが以下のような場合に重要になります。 は、複数のネットワークに対してサービスを提供しています。アドレスを指定しないことで を指定しない場合、サーバーはすべてのUDPパケットとTCP接続を受け入れることができます。 そのポートに対して行われたリクエストは、ネットワーク・インターフェイスに関係なく が到着した。
関連
-
[解決済み】C言語で「関数の型が競合しています」と表示される、なぜ?
-
[解決済み】組み込み関数「malloc」の暗黙の宣言の非互換性
-
[解決済み】エラー:イニシャライザー要素がロード時に計算可能でない
-
[解決済み】cudamalloc()の使用。) なぜダブルポインタなのか?
-
[解決済み] テスト
-
[解決済み】サイズ8の無効な読み取り - Valgrind + C
-
[解決済み】fgetsによるセグメンテーションフォールト(コアダンプ) - と思う。
-
[解決済み】スタックスマッシュを検出しました
-
[解決済み】Errno: 11, Resource Temporarily Unavailable(リソースが一時的に利用できない
-
[解決済み】高放射能環境下で使用するアプリケーションのコンパイルについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】変数の警告が設定されているが使用されていない
-
[解決済み】警告:互換性のないポインタ型からの代入
-
[解決済み】式は、単純なポインタ演算を使用して完全なオブジェクト型へのポインタでなければなりません【重複】。
-
[解決済み】デバッガgdbの使用時に不明な終了シグナルが発生する。
-
[解決済み】 strcpyとstrdupの比較
-
[解決済み】警告。この関数ではXが初期化されていない状態で使用される可能性があります。
-
[解決済み】C言語で浮動小数点例外(コアダンプ)発生
-
[解決済み】cudamalloc()の使用。) なぜダブルポインタなのか?
-
[解決済み] Cプログラムで「配列の添え字が整数でない」。
-
[解決済み】whileループの時間複雑性(Big O)はどうやったらわかるの?