質問するログイン新規登録

回答編集履歴

1

アドレスファミリは共通していました、失礼しました

2019/09/09 11:27

投稿

maisumakun
maisumakun

スコア146715

answer CHANGED
@@ -1,5 +1,5 @@
1
1
  > sa_dataにIPアドレスを指定できないのでしょうか?
2
2
 
3
- `sockadrr_in`の場合はデータ領域が足りるので、できなくはないですが、`addr.sin_family = AF_INET;`のような代入は不可能です。自分でバイト数を数えて正しい位置にデータを書き込む必要が出てきます。
3
+ `sockadrr_in`の場合はデータ領域が足りるので、できなくはないですが、`addr.sin_port = htons(port);`のような代入は不可能です。自分でバイト数を数えて正しい位置にデータを書き込む必要が出てきます。
4
4
 
5
5
  一方で、IPv6用の`sockaddr_in6`やUnixドメインソケット用の`sockaddr_un`は、`sockaddr`よりデータ量が多いので、`sockaddr`で宣言すると**メモリが不足します**([参考](http://www.coins.tsukuba.ac.jp/~syspro/2012/2012-05-23/sockaddr.html))。ただ、これらの`sockaddr_*`構造体は、すべて先頭が「構造体の長さ」と「アドレスファミリ」で始まるという部分は共通していますので、`sockaddr`にキャストしても先頭部には共通してアクセスが可能です。