C ++:尽管发送了数据,Recv仍会永久阻塞

时间:2013-06-07 07:36:25

标签: 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”正在显示,并且thrad会在recv呼叫上挂起。 buf定义为static char buf[BUFSIZ]; recv调用没有看到任何数据的原因是什么?

1 个答案:

答案 0 :(得分:3)

send(orig_sock, buf, BUFSIZ,0);

if ((new_sock = accept( orig_sock, (struct sockaddr *) &clnt_adr, &clnt_len)) < 0) {

没有意义。 orig_sock已连接或正在侦听。不是都。您在send()上缺少错误检查会屏蔽此错误。

您无法发送到侦听套接字。