C++:尽管发送了数据,但 Recv 永远阻塞

标签 c++ sockets

我的程序中有两个线程在运行。一个正在向另一个发送数据。套接字在两个线程上都连接良好,接收线程正在接受连接。然而,一旦 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/

相关文章:

c++ - std::condition_variable 多次调用 notify_all

c++ - iOS项目中的cpp编译问题

c - 在这种情况下,我该如何使用char指针?(Windows中的SOCKET编程)

c++ - 在 C++ 中使用异步通过指针调用虚函数

c++ - 是否可以使用 ADODB::_RecordsetPtr 对象作为成员数据?

c - C中的服务器客户端程序

c# - 系统内存不足异常

Java 服务器套接字响应

java - 为什么下面的代码会打印null?

c++ - 使用 C++ 在超时后重置变量