Socket, Receive() und Timeout

Hi MCoder,

danke für deine Hilfe. Ich habe eine Lösung für mein Problem gefunden: :) :)

1. Ich brauche kein „m_Sock = new SOCKET“, weil jeder meiner Clients eigene Variable für sein Socket hat (danke für den Hinweis).

2. Meine ganze Socketimplementierung habe ich so gelassen wie es war: von der Klasse CSocket bzw. CAsyncSocket abgeleitet.

Um select() zu benutzen, habe ich einfach nur seine Parameter richtig angepasst, weil CAsyncSocket von SOCKET abgeleitet ist.

Der Code sieht jetzt folgender Massen aus:
Code:
CSocket m_Sock;
// Create(), Bind(), Connect()

while( true ) 
{
            fd_set fds;
            FD_ZERO(&fds);
            FD_SET(m_Sock.m_hSocket, &fds); //  <----------
            // Es gibt eine CAsyncSocket methode m_hSocket, die einen Handle auf
            // SOCKET gibt. 
            struct timeval timeout;
            timeout.tv_sec  = 0;
            timeout.tv_usec = 10000;
             int nRet = select(m_Sock.m_hSocket+1, &fds, 0, 0, &timeout); //  <-----------
             if( nRet > 0 )
             {
                char pbBuffer[1024];
                int nRead = m_Sock.Receive(...);

                if( nRead < 1 )
                {
                      break; // Socketfehler bzw. Socket wurde geschlossen
                }
             }
 
Zurück