static void tcpserv(void* parameter)
{
int listenfd;
int remotefd;
int len;
char buf[1024];
struct sockaddr_in local_addr,remote_addr;
fd_set readset;
fd_set writeset;
struct timeval timeout;
timeout.tv_sec = 1;
timeout.tv_usec = 0;
//struct lwip_socket* sock;
listenfd = socket(AF_INET,SOCK_STREAM,0);
local_addr.sin_family = AF_INET;
local_addr.sin_port = htons(80);
local_addr.sin_len = sizeof(local_addr);
local_addr.sin_addr.s_addr = INADDR_ANY;
printf("%s : %d\r\n", __FUNCTION__, __LINE__);
if (bind(listenfd, (struct sockaddr *) &local_addr, sizeof(local_addr)) < 0)
{
return ;
}
if (listen(listenfd, 1) == -1)
{
return;
}
printf("%s : %d\r\n", __FUNCTION__, __LINE__);
len = sizeof(remote_addr);
while(1)
{
remotefd = accept(listenfd, (struct sockaddr *)&remote_addr, &len);
printf("%s : %d\r\n", __FUNCTION__, __LINE__);
//close(listenfd);
//listenfd = -1;
//getpeername(remotefd, (struct sockaddr *)&remote_addr, &len);
if(remotefd != -1)
{
int ret;
send(remotefd,"start to work!\r\n",16,0);
for(;;)
{
FD_ZERO(&readset);
FD_ZERO(&writeset);
FD_SET(remotefd, &readset);
FD_SET(remotefd, &writeset);
ret = lwip_select(remotefd+1, &readset, &writeset, 0, &timeout);
if(ret > 0)
{
if (FD_ISSET(remotefd, &readset))
{
memset(buf,0,50);
if(recv(remotefd,buf,50,0) <= 0)
{
close(remotefd);
remotefd = -1;
break;
}
else
{
int i = strlen(buf);
send(remotefd,buf,i ,0);
}
}
}
else if(ret < 0)
{
close(remotefd);
remotefd = -1;
break;
}
}
}
}
return ;
}