У меня есть данный код:
#include <winsock2.h>
#include <sys/time.h>
#include <iostream>
int main()
{
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
{
std::cout << "WSA Initialization failed!" << std::endl;
WSACleanup();
}
timeval time;
time.tv_sec = 1;
time.tv_usec = 0;
int retval = select(0, NULL, NULL, NULL, &time);
if (retval == SOCKET_ERROR)
{
std::cout << WSAGetLastError() << std::endl;
}
return 0;
}
Он печатает 10022
, что означает ошибку WSAEINVAL. Согласно этой странице, я могу получить эту ошибку, только если:
WSAEINVAL: значение времени ожидания недопустимо, или все три параметра дескриптора имеют значение null.
Однако я видел несколько примеров вызова select() без каких-либо FD_SET
s. Можно как-то? Мне нужно сделать это в коде на стороне клиента, чтобы позволить программе спать в течение коротких периодов времени, пока она не подключена к серверу.
Sleep
. (хотя я твердо верю, чтоsleep
не место в рабочем коде) - person SergeyA   schedule 10.08.2017select
без FD_SET работает в Unix, но я не удивлюсь, если услышу, что он не работает в Winsock. Вместо этого вы можете попробовать использовать Sleep() (не путать с sleep()) - это занимает время в миллисекундах. - person zwol   schedule 10.08.2017