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()` を実行すると、データ構造が破損して終了する可能性があります。