1. ホーム
  2. c

[解決済み] 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 * しかし、実際には、適切なタイプの構造体が渡されることを想定しています。