1

C でのソケット プログラミングでは、単純なクライアント/サーバーの例で、 を呼び出す前に、ソケット ファイル記述子を保持socket()するint変数が 0 に設定されているのを見ました。

int fds;
fds = 0;
fds = socket (AF_INET, SOCK_DGRAM, 0);
if (fds == -1) {
     perror("Socket():");
     exit(-1);
}

これには何か理由がありますか?

4

2 に答える 2

3

何もなし。socket常に値を返します。

于 2012-11-26T16:10:17.490 に答える
1

変数に書き込む前に変数にアクセスしない限り、fdsその本当の理由はありません。

ただし、定義と割り当ての間に一定の距離がある場合は、次のようなfds「無効な」値に設定すると便利な場合があり-1ます。

int fds = -1;
[ lots of code which might accidentally use fds ]
fds = socket (AF_INET, SOCK_DGRAM, 0);
if (fds == -1) {
     perror("Socket():");
     exit(-1);
}

ここで、とfdsの間のどこかで誤ってコードを使用したと想像してください。その無効な使用法のために間違いなくエラーが発生します。int fds = -1;fds = socket(...)

一方、 に設定fdsしなかった場合-1は、任意の値、おそらくプロセスで有効な FD の値になる可能性があります。このファイルに対して、read()またはさらに悪いことに write()` を実行すると、データ構造が破損して終了する可能性があります。

于 2012-11-26T16:10:09.187 に答える