プログラムで 2 つのスレッドを実行しています。一方は他方にデータを送信しています。ソケットは両方のスレッドで正常に接続されており、受信スレッドは接続を受け入れています。ただし、recv が呼び出されると、他のスレッドが送信しているにもかかわらず、何も入っていないかのようにブロックされたままになります。
送信スレッド
send(orig_sock, buf, BUFSIZ,0);
printf("Client sending chunk\n");
printf はなんとか表示されます。
受信スレッド
printf("START ACCEPTING\n");
if ((new_sock = accept( orig_sock, (struct sockaddr *) &clnt_adr, &clnt_len)) < 0) {
perror("accept error");
close(orig_sock);
return NULL;
}
printf("PASS ACCEPT\n");
if ( fork( ) == 0 ) { // Generate a CHILD
printf("FORK\n");
len=recv(new_sock, buf, BUFLEN,0 );
printf("message received");
receiveBuffer.push(*p);
//write(new_sock, buf, len);
//if ( buf[0] == '.' ) break;
printf("Did not receive message\n");
close(new_sock);
return NULL;
} else
close(new_sock);
「FORK」までのすべてのメッセージが表示され、スレッドは recv 呼び出しでハングします。buf は次のように定義されてstatic char buf[BUFSIZ];
います。recv 呼び出しでデータが表示されない理由は何ですか?