我的程序中有两个线程在运行。一个正在向另一个发送数据。套接字在两个线程上都连接良好,接收线程正在接受连接。然而,一旦 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 调用看不到任何数据的任何原因?
最佳答案
send(orig_sock, buf, BUFSIZ,0);
和
if ((new_sock = accept( orig_sock, (struct sockaddr *) &clnt_adr, &clnt_len)) < 0) {
在一起没有意义。 orig_sock
已连接或正在监听。不是都。您在 send()
上缺少错误检查会掩盖此错误。
您不能发送到监听套接字。
关于C++:尽管发送了数据,但 Recv 永远阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16978678/