即使在套接字处的I / O之后,SELECT也没有被解除阻塞

时间:2014-11-03 06:22:24

标签: c sockets unix tcp unix-socket

我需要在每个与主进程连接的进程环之间使用套接字进行通信。 我已将所有进程与主进程连接,并且每个进程都连接到它的左右邻居和主进程。

当其中一个进程从主进程获得要转发到左邻居或右邻居的进程时,进程可以发送给它的左邻居。但是它的左邻居没有从选择系统调用中解锁以接收消息。 我目前只在同一台机器上使用它们。 请让我知道我做错了什么。 这是该过程的代码。

玩家使用套接字(AF_INET,SOCK_STREAM,0)连接

while(1)
{
    FD_ZERO(&read_fd);
    FD_SET(s,&read_fd);
    FD_SET(right_sock,&read_fd);
    FD_SET(left_sock,&read_fd);

    int max_sd=s;

    if(right_sock > max_sd)
        max_sd = right_sock;

    if(left_sock > max_sd)
        max_sd = left_sock;

    int activity = select( max_sd + 1 , &read_fd , NULL , NULL , NULL);

    if(FD_ISSET(s, &read_fd))
    {
        len = recv(s, buf1, 5, 0);
        if ( len < 0 ) 
        {
            fprintf(stderr,"recvhop\n");
            exit(1);
        }

        srand(10);
        ran_no = rand() % 2;
        ran_no = 0;
        strcpy(hopseries,my_id_char);

        if(ran_no == 0)
        {
            printf("Send to Left\n");
            retcode= send(left_sock,&hop_str,strlen(hop_str),0);
            if(retcode == -1)
            {
                fprintf(stderr,"recvhop\n");
                exit(1);
            }

            retcode= send(left_sock,&hopseries,1000,0);
            if(retcode == -1)
            {
                fprintf(stderr,"recvhop\n");
                exit(1);
            }
        }
        else if(ran_no == 1)
        {
            printf("Send to Right\n");
            retcode= send(right_sock,&hop_str,strlen(hop_str),0);
            printf("retcode->%d\n",retcode);
            if(retcode == -1)
            {
                fprintf(stderr,"recvhop\n");
                exit(errno);
            }

            retcode= send(right_sock,&hopseries,1000,0);
            if(retcode == -1)
            {
                fprintf(stderr,"recvhop\n");
                exit(errno);
            }
        }
    }

    if(FD_ISSET(left_sock, &read_fd))
    {
        printf("LEFT\n");
        // RECEIVE FROM IT'S LEFT NEIGHBOUR
    }

    if(FD_ISSET(right_sock, &read_fd))
    {
        printf("RIGHT\n");
        // RECEIVE FROM IT'S RIGHT NEIGHBOUR
        }
    }
}

0 个答案:

没有答案