main() {
unsigned int newfd;
...
.....
while (1) {
printf("Waiting for connection\n");
addrlen = sizeof (clientaddr);
if ((newfd = accept(listener, (struct sockaddr *) &clientaddr, &addrlen)) < 0) {
perror("Server-accept() error lol!");
break;
}
printf("New connection from %s on socket %u\n", inet_ntoa(clientaddr.sin_addr), newfd);
pthread_create(&threads[i++], NULL, (void*)fileTransfer_Worker, &newfd);
sleep(1);
}
}
void* fileTransfer_Worker(void *desc) {
unsigned int sock = *(unsigned int *) desc;
printf("Waiting for data in sock %d %u\n", sock, pthread_self());
}
出力
Waiting for connection
New connection from 192.168.4.57 on socket 4
Waiting for connection
New connection from 192.168.4.57 on socket 5
Waiting for connection
Waiting for data in sock 4 3076578160
Waiting for data in sock 5 3068189552
New connection from 192.168.4.57 on socket 6
Waiting for connection
Waiting for data in sock 6 3059800944
New connection from 192.168.4.57 on socket 7
Waiting for connection
New connection from 192.168.4.57 on socket 8
Waiting for connection
New connection from 192.168.4.57 on socket 9
Waiting for connection
Waiting for data in sock 8 3051412336
New connection from 192.168.4.57 on socket 10
Waiting for data in sock 9 3034635120
Waiting for data in sock 10 3043023728
Waiting for connection
New connection from 192.168.4.57 on socket 11
Waiting for connection
New connection from 192.168.4.57 on socket 12
Waiting for connection
New connection from 192.168.4.57 on socket 13
Waiting for connection
Waiting for data in sock 13 3001080688
Waiting for data in sock 13 3026246512
Waiting for data in sock 13 3017857904
Waiting for data in sock 13 3009469296
出力を調べると、ソケット 13 が 4 回表示されていることがわかります。これは、実際にはソケット 7、11、12、および 13 に対するものです。
より多くのクライアント接続を同時に呼び出すたびに、動作が変わります。
pthread_create() の後に sleep(1) を追加すると、予想される動作を確認できました。pthread_create 後のスリープは必須ですか? または、スリープを使用せずにこの問題を解決するにはどうすればよいですか?
これについて私を助けてください。前もって感謝します