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