Zeitüberschreitung für die connect () - Funktion einstellen. Tcp-Socket-Programmierung in C unterbricht recv ().

In meinem Programm Wenn der Server nicht erreichbar ist, dauert die Verbindungsfunktion zu lange. Also versuche ich, mit select () eine Verbindungspause einzulegen. Jetzt ist das Problem, dass, wenn ich versuche, Daten vom Bediener zu empfangen, der recvfrom () verwendet, ich Störung "EAGAIN" erhielt. Hier ist der Code, der zum Verbinden und Empfangen von Daten vom Server verwendet wird.

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;
}

Antworten auf die Frage(4)

Ihre Antwort auf die Frage