Thanks for your replies.
I used 30 as a priority since MAIN_PRIO -1 did not work either. Here is the complete code.
Code: Select all
void Network (void *pd)
{
IPADDR client_addr;
WORD port;
int fdnet;
//Set up the Listening TCP socket
int fdListen = listen( INADDR_ANY, TCP_PORT_TO_USE, 5 );
if ( fdListen > 0 )
{
setsockoption(fdListen, SO_NONAGLE);
writestring( fdlancon, MTS_WHEN_NOTCONNECTED );
while ( 1 )
{
writestring( fdlancon, "Inside\r\n" );
fdnet = accept( fdListen, &client_addr, &port, 0 );
writestring( fdlancon, MTS_WHEN_CONNECTION_OPENED );
sprintf(buf, "fdnet = %d\r\n", fdnet);
writestring( fdlancon, buf );
int tcp_timeout = 0;
while ( fdnet > 0 )
{
fd_set read_fds;
fd_set error_fds;
FD_ZERO( &read_fds );
FD_SET( fdnet, &read_fds );
//We only check for a waiting socket on the listener when we could do something about it.
if ( tcp_timeout >= OVERIDE_TIMEOUT )
{
FD_SET( fdListen, &read_fds );
}
FD_ZERO( &error_fds );
FD_SET( fdnet, &error_fds );
if ( select( FD_SETSIZE, &read_fds, ( fd_set * ) 0, &error_fds, TCP_WRITE_TIMEOUT ) )
{
if ( FD_ISSET( fdnet, &read_fds ) )
{
char buffer[40];
int n = read( fdnet, buffer, 40 );
// data received here from net
write( fdlancon, buffer, n ); // write to serial
// reply sent here to net
if (buffer[0] == 'H')
write( fdnet, "LAN -- Hi!\r\n", n );
close( fdnet );
fdnet = 0;
writestring( fdlancon, "LAN -- Connection Complete\r\n" );
}
if ( FD_ISSET( fdnet, &error_fds ) )
{
writestring( fdlancon, MTS_WHEN_CONNECTION_CLOSED );
close( fdnet );
fdnet = 0;
writestring( fdlancon, MTS_WHEN_NOTCONNECTED );
}
if ( FD_ISSET( fdListen, &read_fds ) )
{
//We have a new suitor waiting on the listening socket.
// writestring( fdlancon, MTS_WHEN_CONNECTION_OVERIDDEN );
// writestring( fdnet, MTN_WHEN_CONNECTION_OVERIDDEN );
// close( fdnet );
// fdnet = 0;
}
}
else
{
//Select Timed out
tcp_timeout++;
if ( tcp_timeout > TIMEOUT_LIMIT )
{
writestring( fdlancon, MTS_WHEN_CONNECTION_TIMEDOUT );
writestring( fdnet, MTN_WHEN_CONNECTION_TIMEDOUT );
close( fdnet );
writestring( fdlancon, MTS_WHEN_NOTCONNECTED );
fdnet = 0;
}
}//if ( select( FD_SETSIZE, &read_fds, ( fd_set * ) 0, &error_fds, TCP_WRITE_TIMEOUT ) )
}//while ( fdnet > 0 )
}//while ( 1 )
}//if ( fdListen > 0 )
}
I will try anything you suggest.
Ewan.