尽管数据正在发送,Recv仍然永远阻塞
C++: Recv blocking forever despite data being sent
我的程序中有两个线程正在运行。一个向另一个发送数据。套接字在两个线程上连接良好,并且接收线程正在接受连接。然而,一旦recv被调用,它只是坐在那里阻塞,就好像它没有收到任何东西一样,尽管事实上另一个线程正在发送。
发送线程send(orig_sock, buf, BUFSIZ,0);
printf("Client sending chunkn");
打印文件成功显示。
接收线程printf("START ACCEPTINGn");
if ((new_sock = accept( orig_sock, (struct sockaddr *) &clnt_adr, &clnt_len)) < 0) {
perror("accept error");
close(orig_sock);
return NULL;
}
printf("PASS ACCEPTn");
if ( fork( ) == 0 ) { // Generate a CHILD
printf("FORKn");
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 messagen");
close(new_sock);
return NULL;
} else
close(new_sock);
在"FORK"之前的所有消息都被显示,线程挂起在recv调用上。但定义为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()
的错误检查的缺乏掩盖了这个错误。
相关文章:
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 为什么是谷神星协方差.计算()似乎永远运行而不返回?
- 密码登录程序将永远循环并显示不正确的结果
- 我想在C++中读取一些多个字符,但它永远不会读取第二个字符
- SFML 碰撞永远不会在我的系统中注册
- Linux 服务器中的 Recv 缓冲区大小
- 在 for 循环中处理复杂的发送 recv 消息
- 先进先出:一个进程永远不会从管道读取
- 移动构造函数永远不会被调用
- C++ TCP 套接字通信 - 连接按预期工作,几秒钟后失败,没有收到新数据,read() 和 recv() 块
- 在 Linux 中关闭 UDP 套接字后,recv 不会返回
- 程序永远不会进入虚拟析构函数
- 为什么套接字中的 recv() 函数不返回任何内容?
- 在 *.cpp 文件中实现的 c++ 函数/方法永远不会内联扩展吗?
- C++网络,recv() 无缘无故失败 (?)
- 指针永远不会在链表深层复制构造函数中达到 null
- 为什么我的 while 循环永远不会在 C++ 中的数字猜测游戏中结束?
- 类似函数的宏参数名称替换是否保证永远不会发生?
- 设置SO_RCVTIMEO时,为什么recv返回-1并且errno=EINTR
- 尽管数据正在发送,Recv仍然永远阻塞