1. ホーム
  2. c++

[解決済み] sa_family_tとは

2022-02-09 21:38:47

質問事項

私は以下のことを行っています。 Beej's Guide to Network Programming(ビージズ・ガイド・トゥ・ネットワーク・プログラミング VC++ 2010を使用していますが、構造体をコピーしてプログラムに貼り付けると、一部の型が不正な識別子で表示されます。例えば、以下のようなものです。

u_int32_t というのが出てきて、いろいろ調べてみると、これらは1999年頃のC言語の古い型であることがわかりました。私は、単に stdint.h しかし、そのためには、その意味を覚えておく必要があります。その代わりに、私は標準的な int は32ビット(4バイト)、それ以外の64ビット(8バイト)のものには long long int .

とにかく、最後のシンタックスエラーまで絞り込んで、次のように書いてあります。 sa_family_t は無効なインデントです。どうすればいいのか見当もつかないし、検索しても何も出てこない。これは私の問題で、型識別子に何を指定すればいいのかがわからないのです。

もうひとつ気になるのが、これ。 char __ss_pad1[_SS_PAD1SIZE]; は、その SS_PAD1SIZE というものも無効であると赤く表示されます。

解決方法は?

sa_family_t は符号なし整数でなければなりません。 Windowsのヘッダーファイルは、その標準に準拠していません。 Winsock.hでは、sockaddr構造体を以下のように定義しています。

struct sockaddr {
        u_short sa_family;              /* address family */
        char    sa_data[14];            /* up to 14 bytes of direct address */
};

ですから、あなたのコードをコンパイルするためには、あなた自身がsa_family_tをtypedefする必要があります。