Тайм-аут сокета в C ++ Linux

Хорошо, прежде всего я хотел бы упомянуть, что я делаю это совершенно этично, и да, я сканирую порт.

Программа работает нормально, когда порт открыт, но когда я добираюсь до закрытого сокета, программа останавливается на очень долгое время, потому что нет условия тайм-аута. Ниже приведен следующий код

int main(){

    int err, net;
    struct hostent *host;
    struct sockaddr_in sa;

    sa.sin_family = AF_INET;

    sa.sin_port = htons(xxxx);
    sa.sin_addr.s_addr = inet_addr("xxx.xxx.xxx.xxx");

    net = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    err = connect(net, (struct sockaddr *)&sa, sizeof(sa));

    if(err >= 0){ cout << "Port is Open"; }
    else { cout << "Port is Closed"; }

}

Я нашел это при переполнении стека, но это просто не имеет смысла для меня, используяВыбрать() команда.

Вопрос в том, можем ли мы сделать тайм-аут функции connect (), чтобы не ждать год, чтобы он вернулся с ошибкой?

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

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