::recv()-Timeout

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Kmitska
Beiträge: 349
Registriert: Fr Sep 23, 2011 8:49 pm
Wohnort: Karlsruhe, Pforzheim

::recv()-Timeout

Beitrag von Kmitska » So Sep 16, 2012 1:50 pm

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.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: ::recv()-Timeout

Beitrag von Xin » Mo Sep 17, 2012 1:09 pm

Auf die Schnelle habe ich nur 'setsockopt' gefunden, wo man den Timeout als Option angeben kann.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten