C でのソケット プログラミングでは、単純なクライアント/サーバーの例で、 を呼び出す前に、ソケット ファイル記述子を保持socket()するint変数が 0 に設定されているのを見ました。
int fds;
fds = 0;
fds = socket (AF_INET, SOCK_DGRAM, 0);
if (fds == -1) {
perror("Socket():");
exit(-1);
}
これには何か理由がありますか?
C でのソケット プログラミングでは、単純なクライアント/サーバーの例で、 を呼び出す前に、ソケット ファイル記述子を保持socket()するint変数が 0 に設定されているのを見ました。
int fds;
fds = 0;
fds = socket (AF_INET, SOCK_DGRAM, 0);
if (fds == -1) {
perror("Socket():");
exit(-1);
}
これには何か理由がありますか?
何もなし。socket常に値を返します。
変数に書き込む前に変数にアクセスしない限り、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()` を実行すると、データ構造が破損して終了する可能性があります。