accept() (redhat Enterprise 4/Linux カーネル 2.6 上) が、同じアプリケーションと同じマシンの同じプロセスからの異なる TCP 接続に対して同じソケット値を返す可能性はありますか?
ログファイルを確認したところ、サーバー側で多くの接続が同じソケット値を持っているという結果が得られたとき、私はとても驚いています!! それはどのように可能ですか?
ちなみに、リッスンにはTCPブロッキングソケットを使用しています。
main(){
int fd, clientfd, len, clientlen;
sockaddr_in address, clientaddress;
fd = socket(PF_INET, SOCK_STREAM, 0);
....
memset(&address, 0, sizeof address);
address.sin_address = AF_INET;
address.sin_port = htons(port);
....
bind(fd, &address, sizeof address);
listen(fd, 100);
do {
clientfd = accept(fd, &clientaddress, &clientlen);
if (clientfd < 0) {
....
}
printf("clientfd = %d", clientfd);
switch(fork()){
case 0:
//do something else
exit(0);
default:
...
}
} while(1);
}
私の質問は、なぜprintf("clientfd = %d");
異なる接続に対して同じ番号を出力するのかということです!!!