[解決済み] bind() を呼び出すときに sockaddr_in を sockaddr にキャストするのはなぜですか?
2022-02-14 13:51:05
質問
は
bind()
へのポインタを受け取ります。
sockaddr
しかし、私が見た全ての例では
sockaddr_in
構造体が代わりに使用され、それが
sockaddr
:
struct sockaddr_in name;
...
if (bind (sock, (struct sockaddr *) &name, sizeof (name)) < 0)
...
どうして
sockaddr_in
構造体を使用しています。を用意して渡すだけではダメなのでしょうか?
sockaddr
?
単なる慣習なのか?
解決方法は?
いいえ、単なる慣習ではありません。
sockaddr
はあらゆる種類のソケット操作のための汎用的な記述子であるのに対し
sockaddr_in
はIPベースの通信に特化した構造体です(IRCでは、"in" は "InterNet" を意味します)。私の知る限り、これは一種のポリモーフィズムです。
bind()
を受け取るように見せかけて
struct sockaddr *
しかし、実際には、適切なタイプの構造体が渡されることを想定しています。
関連
-
[解決済み】 error: too few arguments to function `printDay' (C言語)
-
[解決済み】 strcpyとstrdupの比較
-
[解決済み】Cygwin - Makefile-error: ターゲット `main.o' のレシピに失敗しました。
-
[解決済み] struct で "warning: useless storage class specifier in empty declaration" (警告: 空の宣言での無駄なストレージクラス指定子)
-
[解決済み】スレッド1:EXC_BAD_ACCESS(コード=1、アドレス=0x0)標準Cメモリ問題
-
[解決済み】「構造体でもユニオンでもないものにメンバー'*******'を要求する」とはどういう意味ですか?
-
[解決済み】Linuxでexeclp()がどのように動作するのか理解できません。
-
[解決済み】C言語でint64_t型を表示する方法
-
[解決済み】C言語で入力が整数型かどうかチェックする
-
[解決済み】Linuxソケットのwrite()でBad File Descriptorが発生するC
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー:cの入力の最後に期待される宣言またはステートメント
-
[解決済み] Connect: ソケット以外でのソケット操作
-
[解決済み】デバッガgdbの使用時に不明な終了シグナルが発生する。
-
[解決済み】Cygwin - Makefile-error: ターゲット `main.o' のレシピに失敗しました。
-
[解決済み】式は変更可能なL値でなければならない
-
[解決済み】Linuxでexeclp()がどのように動作するのか理解できません。
-
[解決済み】C言語でint64_t型を表示する方法
-
[解決済み】MPI通信でMPI_Bcastを使用する場合
-
[解決済み】エラー:不明な型名'bool'
-
[解決済み】宣言指定子で2つ以上のデータ型がある場合のエラー【非公開