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
Find the answer by oneself
This problem was disconnected socket by server
Thanks