尽管数据正在发送,Recv仍然永远阻塞

C++: Recv blocking forever despite data being sent

本文关键字:Recv 永远 数据      更新时间:2023-10-16

我的程序中有两个线程正在运行。一个向另一个发送数据。套接字在两个线程上连接良好,并且接收线程正在接受连接。然而,一旦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()的错误检查的缺乏掩盖了这个错误。