C言語のソケットプログラミングをしていて
ソケットの情報を保管している構造体について
どうしても理解できないところがあるので教えてください。
c
1 struct sockaddr_in addr; 2 addr.sin_family = AF_INET; 3 addr.sin_port = htons(port); 4 addr.sin_addr.S_un.S_addr = INADDR_ANY; 5 bind(sock0, (struct sockaddr*) & addr, sizeof(addr));
まずbind関数の第二引数で
addr(sockadrr_in構造体)をキャストしsockadrrに直している
ところですが
ほとんど似た質問
の回答によると
string
1bindはどんな種類のソケット情報構造体のアドレスも受け入れられるよう、関数プロトタイプの第2引数は、汎用的なソケット情報であるstruct sockaddrで宣言されています。
なぜsockadrr_inからsockadrrへキャストしなければいけないのかは
上記の説明でなんとなくわかったのですが
リンク先の質問である
最初からsockdrr_inではなくsockadrrを使えばいいのではないか?
の回答が理解できないです。
回答では
string
1この構造体にはインターネットドメインソケット固有の情報であるIPアドレスやポート番号のフィールドがありませんので、それらの値をセットできません。
でも構造体の中身を見ると
sa_family・・・アドレスのファミリ
sa_data・・・アドレスそのもの
確かにポートを指定できそうなものはありませんが
sa_dataにIPアドレスを指定できないのでしょうか?
(ここまで考えると汎用の意味もわからなくなってきた)
c
1sockadrr_in・・・TCP/IPの通信プログラムを作るときに必要 2 3sockadrr・・・汎用型の構造体
結構調べたのですがなかなか理解が進みません。
分からないのでお願いします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/09 14:18
2019/09/09 14:34
2019/09/10 02:52 編集