[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lwip-users] tcp connection problem
From: |
nopsoft |
Subject: |
[lwip-users] tcp connection problem |
Date: |
Thu, 31 Aug 2006 15:03:27 +0200 |
hello,
I am using FreeRTOS 4.1.0 - OS, lwIP 1.1.1 and ppp. PPP, IP, ICMP (ping) work
fine and is stable I hope.
I have problem with TCP. I make http server. Ather telnet ip 80 connection is
made (TCP_DEBUG: TCP connection established ...->80) and then OS crashes. I did
analise => OS is halt on TCP_EVENT_ACCEPT(pcb, ERR_OK, err); in tcp_in.c
(tcp_process). Have you any ideas?
My server code:
//--------------------------------------------------------------- inicjalizacja
lwIP ---------------------------------------------
/*void tcpip_init_done(void * arg)
{
sys_sem_t *sem = arg;
sys_sem_signal(*sem);
} */
void vlwIPInit( void )
{
// sys_sem_t sem;
/* Initialize lwIP and its interface layer. */
sys_init();
mem_init();
memp_init();
pbuf_init();
netif_init();
ip_init(); // wykonywane takze przez tcpip_init
tcpip_init( NULL, NULL ); // bez samafory
/* sem = sys_sem_new(0);
tcpip_init(tcpip_init_done, &sem);
sys_sem_wait(sem);
sys_sem_free(sem); */
}
//------------------------------------------------------------ serwer http
---------------------------------------------------------------
/*------------------------------------------------------------*/
/* The size of the buffer in which the dynamic WEB page is created. */
#define webMAX_PAGE_SIZE 2048
/* Standard GET response. */
#define webHTTP_OK "HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n"
/* The port on which we listen. */
#define webHTTP_PORT ( 80 )
/* Delay on close error. */
#define webSHORT_DELAY ( 10 )
/* Format of the dynamic page that is returned on each connection. */
#define webHTML_START \
"<html>\
<head>\
</head>\
<BODY
onLoad="window.setTimeout("location.href='index.html'",1000)"bgcolor="#CCCCff">\
\r\nPage Hits = "
#define webHTML_END \
"\r\n</pre>\
\r\n</BODY>\
</html>"
/*
* Process an incoming connection on port 80.
*
* This simply checks to see if the incoming data contains a GET request, and
* if so sends back a single dynamically created page. The connection is then
* closed. A more complete implementation could create a task for each
* connection.
*/
static void vProcessConnection( struct netconn *pxNetCon );
/*------------------------------------------------------------*/
static void vProcessConnection( struct netconn *pxNetCon )
{
static portCHAR cDynamicPage[ webMAX_PAGE_SIZE ], cPageHits[ 11 ];
struct netbuf *pxRxBuffer;
portCHAR *pcRxString;
unsigned portSHORT usLength;
static unsigned portLONG ulPageHits = 0;
/* We expect to immediately get data. */
pxRxBuffer = netconn_recv( pxNetCon );
if( pxRxBuffer != NULL )
{
/* Where is the data? */
netbuf_data( pxRxBuffer, ( void * ) &pcRxString, &usLength );
/* Is this a GET? We don't handle anything else. */
if( !strncmp( pcRxString, "GET", 3 ) )
{
pcRxString = cDynamicPage;
/* Update the hit count. */
ulPageHits++;
sprintf( cPageHits, "%lu", ulPageHits );
/* Write out the HTTP OK header. */
netconn_write(pxNetCon, webHTTP_OK, (u16_t)strlen( webHTTP_OK ),
NETCONN_COPY );
/* Generate the dynamic page...
... First the page header. */
strcpy( cDynamicPage, webHTML_START );
/* ... Then the hit count... */
strcat( cDynamicPage, cPageHits );
strcat( cDynamicPage, "<p><pre>Task State Priority Stack
#<br>************************************************<br>" );
/* ... Then the list of tasks and their status... */
vTaskList( ( signed portCHAR * ) cDynamicPage + strlen( cDynamicPage ) );
/* ... Finally the page footer. */
strcat( cDynamicPage, webHTML_END );
/* Write out the dynamically generated page. */
netconn_write(pxNetCon, cDynamicPage, (u16_t)strlen( cDynamicPage ),
NETCONN_COPY );
}
netbuf_delete( pxRxBuffer );
}
netconn_close( pxNetCon );
}
/*------------------------------------------------------------*/
#define mainWEBSERVER_PRIORITY ( tskIDLE_PRIORITY + 2 )
void vBasicWEBServer( void *pvParameters )
{
struct netconn *pxHTTPListener, *pxNewConnection;
/* Create a new tcp connection handle */
kprintf("http serv lev 0\n");
pxHTTPListener = netconn_new( NETCONN_TCP );
kprintf("http serv lev 1\n");
netconn_bind(pxHTTPListener, NULL, webHTTP_PORT );
kprintf("http serv lev 2\n");
netconn_listen( pxHTTPListener );
kprintf("http serv lev 3\n");
/* Loop forever */
for( ;; )
{
kprintf("http serv lev 4\n");
/* Wait for connection. */
pxNewConnection = netconn_accept(pxHTTPListener); //tutaj watek sie
zatrzymuje oczekujac na polaczenie
kprintf("http serv lev 5\n");
if(pxNewConnection != NULL)
{
kprintf("http serv lev 6\n");
/* Service connection. */
vProcessConnection( pxNewConnection );
while( netconn_delete( pxNewConnection ) != ERR_OK )
{
vTaskDelay( webSHORT_DELAY );
}
}
}
}
best regards
Janusz
- [lwip-users] tcp connection problem,
nopsoft <=