Get problem about Select function in Socket Application

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Get problem about Select function in Socket Application

1,926 Views
win77man
Contributor I

I Need your help

I have a board but i had got a problem "IMX6QP SabreSD"

Development environment :

    1. IMX6QP SabreSD (Board)

    2. imx-yocto-L4.14.98_2.0.0_ga (Linux)

Problem :

    1. Select() use

        Receive ok inside 10sec, but do not wait until receive data when 10sec ~ 2minute after open

    2. polling check recv()

        Receive ok inside 10sec, but do not wait until receive data when 10sec ~ 2minute after open( Same result)

I want wait until receive data but bypass (receive size 0, both "select()" and "while recv()") after open 10 sec

I try in order to find an answer with kernel source at "/drivers/net/ethernet/freescale/ fec_main,c, fec_pt.c, phy_device.c" But I cann't find answer

======================================================================================

// Act as Client

main()

{

    int m_socket, recvBytes;

    struct addrinfo server_addr, *addr = NULL;

    struct sockaddr_in addr4;

    char szBuffer[512];

    fd_set m_fdRead;

   

    m_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

   

    memset(&server_addr, 0, sizeof(server_addr));

    server_addr.sin_family = AF_INET;

    server_addr.sin_addr.s_addr = inet_addr("192.168.0.100"); //"192.168.0.100": Linux server

    server_addr.sin_port = htons("9001"); //9001: Temporary port

    connect( m_socket, (struct sockaddr *)&addr4, sizeof(addr4));

#if (USE_SELECT == 1)

    while(1)

    {

        memset(szBuffer, 0, sizeof(szBuffer));

        FD_ZERO(&m_fdRead);

        FD_SET(m_socket, &m_fdRead);

        select(m_socket+1, &m_fdRead, NULL, NULL, NULL);

        if(FD_ISSET(m_socket, &m_fdWrite) {

            Recv(szBuffer, 512, 0);

            printf("Receive Msg is: %s", szBuffer);

        }

    }

#else

    while(1)

    {

        memset(szBuffer, 0, sizeof(szBuffer));

        recvBytes = 0;

        while(recvBytes == 0)

        {

            recv(szBuffer, 512, 0);

            usleep(1000);

        }

        printf("Receive Msg is: %s", szBuffer);

    }

#endif

}

=============================================================================

How i can solve a problem

Labels (4)
0 Kudos
1 Reply

853 Views
win77man
Contributor I

Find the answer by oneself

This problem was disconnected socket by server

Thanks

0 Kudos