Einstellung time-out für die connect () - Funktion die tcp-socket-Programmierung in C bricht recv()

In meinem Programm, Wenn der server nicht erreichbar ist die connect-Funktion nutzen zu viel Zeit. Also versuche ich, genügend Zeit zu geben, sich zu verbinden, wählen Sie mit(). Das problem ist jetzt, dass wenn ich versuche, zum empfangen von Daten vom server mit recvfrom() ich erhielt den Fehler "EAGAIN". hier ist der code verwendet, um die Verbindung und empfangen von Daten vom server.

int sock;
struct sockaddr_in addr;
int connectWithServer
{

    int status;

    struct timeval  timeout;
    timeout.tv_sec = 10;
    timeout.tv_usec = 0;

    addr.sin_port = htons(port);
    sock = socket (AF_INET,SOCK_STREAM,0);
    inet_pton(AF_INET,serverIP,&addr.sin_addr);

    fd_set set;
    FD_ZERO(&set);
    FD_SET(sock, &set);

    fcntl(sock, F_SETFL, O_NONBLOCK);

    if ( (status = connect(sock, (struct sockaddr*)&addr, sizeof(addr))) == -1)
    {
        if ( errno != EINPROGRESS )
            return status;

    }
    status = select(sock+1, NULL, &set, NULL, &timeout);

    return status;
}


long int receiveResponse (void *response , unsigned int length)
{
    socklen_t sockLen = sizeof(struct sockaddr);
    long int received = recvfrom(sock, response, length, 0,(struct sockaddr *)&addr,  &sockLen);
    printf("Received %ld bytes...  err %d\n",received, errno);

    return received;
}
  • recvfrom und connect passt nicht. Erste ist für UDP-sockets, letzteres ist TCP im Zusammenhang
  • aber seine Arbeit gut, wenn es keine Zeit gibt, aus
  • ja, es funktioniert, aber from parameter ist sinnlos, da Sie wissen, wer das peer. Egal, es war nur ein Vorschlag
InformationsquelleAutor Rajesh | 2013-01-10
Schreibe einen Kommentar