Hi All,

First of all I'm using NO_SYS=0 and SYS_LIGHTWEIGHT_PROT = 1 and the OS is 
SYS/BIOS.

I have a thread A that opens a TCP socket and waits in the accept(). Once a 
connection is made, thread A gives the new socket to a thread wokerN (where 
there can be 5 worker threads) to handle the sending/receiving. Thread A goes 
back and waits for a new request.

Thread A pseudo code
lSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

memset((char *)&sLocalAddr, 0, sizeof(sLocalAddr));
sLocalAddr.sin_family = AF_INET;
sLocalAddr.sin_len = sizeof(sLocalAddr);
sLocalAddr.sin_addr.s_addr = htonl(INADDR_ANY);
sLocalAddr.sin_port = htons(1000);

bind(lSocket, (struct sockaddr *)&sLocalAddr, sizeof(sLocalAddr));
listen(lSocket, 5);
while (1) {
   clientfd = accept(lSocket, (struct sockaddr*)&client_addr, (socklen_t 
*)&addrlen);

   give clientfd to a worker thread...
}

The worker does the following echo once it is told to run.

WorkerThread pseudo code
while (flag) {
   nbytes = recv(clientfd, (char *)&buffer, sizeof(buffer),0);
   if (nbytes > 0) {
       send(clientfd, (char *)&buffer, nbytes, 0 );
   }
   else {
       close(clientfd);
       flag = FALSE;
   }
}

This works great for the first 2 requests. I see worker1 and worker2 start with 
clientfd of 1 and 2. Once I start a third request, I see the request come in 
and the third thread start to run. For a few seconds all three connections 
streaming, then either W1 or W2 thread receives an nbytes=0 and closes the 
socket. I'll try again to get the third connection going, and it runs for a 
couple seconds and then one of the threads gets a nbytes=0.

If I only exit if nbytes is negative (basically nop if nbytes=0), then all 
three streams halt.

Any ideas what to look at? The mem lwIP_stats looked ok.

Thanks,
Todd
_______________________________________________
lwip-users mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/lwip-users

Reply via email to