Установка времени ожидания для функции connect () программирования tcp сокетов в C breaks recv ()

В моей программе Если сервер недоступен, функция подключения занимает слишком много времени. Поэтому я стараюсь дать время для подключения с помощью select (). Теперь проблема в том, что когда я пытаюсь получить данные с сервера с помощью recvfrom (), я получаю сообщение об ошибке "EAGAIN», Вот код, используемый для подключения и получения данных с сервера.

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

Ответы на вопрос(4)

Ваш ответ на вопрос