lwip-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lwip-users] tcp server problem


From: 厦清
Subject: [lwip-users] tcp server problem
Date: Wed, 7 Sep 2011 19:33:46 +0800

Hi

    I have a question to ask. I run the chargen file but the tcp server could't receive any packet. the program below work well. But I don't understand why the chargen file couldn't work out. if anyone else has ideas please tell me, thank you



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 ;
}

reply via email to

[Prev in Thread] Current Thread [Next in Thread]