Seite 1 von 1

::recv()-Timeout

Verfasst: So Sep 16, 2012 1:50 pm
von Kmitska
Hallo Leute,

ich versuche gerade ein "timeout" hinzuzufügen.

Mein Problem ist, dass mein Server wartet, bis eine Eingabe gemacht wird, und bei diversen solchen Aufforderungen kommt es zur unnötigen Überlastung.

Die ::recv Funktion sieht bei mir so aus:

Code: Alles auswählen

int Socket::recv ( string& s ) const {
    if(s.length() == 0){
        return -1;
    }
    char buf [ MAXRECV + 1 ];
    s = "";
    memset ( buf, 0, MAXRECV + 1 );

    int status = ::recv ( m_sock, buf, MAXRECV, 0);

    if ( status > 0 || status != -1 ) {
        s = buf;
        return status;
    }
    else {
        throw SockExcept("Fehler in Socket::recv");
        return 0;
    }
}

Code: Alles auswählen

 ::recv ( m_sock, buf, MAXRECV, 0);
Habe hier als Flag "0", gibt es hier ein Flag für das non-blocking?

Aufruf:

Code: Alles auswählen

void* newCommand(void* p)
{
    Socket* sock = (Socket*) p;
    sock->send("+Welcome\n");
    string req;
    sock->recv (req);
    ...
}
Habe noch etwas mit select() mitbekommen, dass man das damit erledigt.
Weiß aber garnichts darüber und die Beispiele im Web verstehe ich nicht bzw. weiß nicht, wie ich das anpassen soll.
Würde mich freuen, wenn Ihr mir hier helfen könnt.

Danke im Voraus.

Re: ::recv()-Timeout

Verfasst: Mo Sep 17, 2012 1:09 pm
von Xin
Auf die Schnelle habe ich nur 'setsockopt' gefunden, wo man den Timeout als Option angeben kann.