c# - C++ socket select() function returns 0 with many connections -


i have code server sends udp message contains tcp port number clients. server waits incoming tcp connections clients. however, select() function returns timeout many connections. can figure out might problem.

any , comments on code below appreciated. in advance help.

void initialise( void )  {     m_tcp_listensocket = getlistensocket();   highsock = m_tcp_listensocket;    setnonblocking(m_tcp_listensocket);   struct timeval timeout;   timeout.tv_sec = m_timeout;   timeout.tv_usec = 0;     // send udp messages clients not connected   (int = 0; < udp_connections.size(); i++)   {         // clients not connected       if ( tcp_connections[i]->isconnected() )       {         continue;       }        // making message: 'server_address:server_port'.       char l_str_server_port_number[6];       sprintf ( l_str_server_port_number, "%d",  tcp_connections[i]->get_server_port_number ());        struct hostent  *host;       if( (host = gethostbyname( m_host_name )) == null)      {         // gethostbyname() made error      }           struct in_addr  myaddress;       memcpy( &myaddress.s_addr, host->h_addr_list[0], sizeof( myaddress.s_addr ) );        std::string l_str_init_message = std::string(l_str_server_port_number) + "\0";        udp_connections[i]->sendudpmessage(l_str_init_message.c_str());    }    (int = 0; < tcp_connections.size(); i++)     {       struct sockaddr_in clientaddr;         bzero(&clientaddr, sizeof(clientaddr));       clientaddr.sin_family = af_inet;       clientaddr.sin_addr.s_addr = htonl(inaddr_any);        fd_set readset;       fd_zero(&readset);       fd_set(m_tcp_listensocket, &readset);        int readsocks = select(highsock+1, &readset, null, null, &timeout);        switch (readsocks)     {     case 0:       /* timeout */          break;      case -1:       /* error */       break;      default:       if (fd_isset (m_tcp_listensocket, &readset))         {           socklen_t tempo = (socklen_t)sizeof(clientaddr);            int l_socket = accept(m_tcp_listensocket, (struct sockaddr *)&clientaddr, &tempo);           if ( l_socket > highsock )         highsock =  l_socket;            if ( l_socket >= 0 )         {           // connection accepted            char adr[16] ;           inet_ntop(pf_inet,&clientaddr.sin_addr, adr, sizeof(adr));            (int j= 0; j < udp_connections.size(); j++)             {                if ( udp_connections[j]->get_clientip() == (std::string)adr )             {                    tcp_connections[j]->set_tcpsocket( l_socket );               break;             }             }          }           else          {           // socket error         }         }     }     } } 

some implementations of select() update timeout argument, may need reset before each call.


Comments

Popular posts from this blog

javascript - Enclosure Memory Copies -

php - Replacing tags in braces, even nested tags, with regex -