@tex620

Делаю парсер портов и ip адресов. Как сделать таймаут?

Я пытаюсь сделать парсер на с++
Написал такой код, который переводит сокет в неблокирующий режим
Но функция connect возвращает значение через 10-30 секунд.
Мне нужно поставить таймаут на 0.1 секунду.
Как это сделать?
void CheckPort(string ip, int port) {
	WSAStartup(MAKEWORD(2, 2), NULL);
	SOCKET sock;
	SOCKADDR_IN Info;
	int nret;
	sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);


	Info.sin_family = AF_INET;
	Info.sin_addr.s_addr = inet_addr(ip.c_str());
	Info.sin_port = htons(port);
	
	u_long nbio = 1;
	ioctlsocket(sock, FIONBIO, &nbio);
	
	timeval tv;  tv.tv_sec = 1;  tv.tv_usec = 0;

	nret = connect(sock, (SOCKADDR *)&Info, sizeof(Info));
	//int result = select(sock, NULL, NULL, NULL, &tv);
	//cout << result << endl;

	if (!nret)
	{
		// connection successful
		cout << ip << " TRUE" << endl;
		output << ip << endl;
	}
	else 
	{
		// connection fail
		cout << ip << " FALSE" << endl;
	}
	closesocket(sock);
}
  • Вопрос задан
  • 200 просмотров
Решения вопроса 1
myjcom
@myjcom Куратор тега C++
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы