Тайм-аут (например, то, что вы реализуете.) Не является оператором задержки.Скорее, это метод предотвращения блокировки вызовов, таких как recv()
или recvfrom()
, на неопределенный срок.Если трафик данных обнаруживается раньше, чем установлен тайм-аут, тем лучше.Функция получает его, и выполнение программы продолжается.Тайм-аут, как он есть, ждет до 2 секунд, чтобы что-то произошло.Если ничего не происходит, то он позволяет методу прекратить ожидание и продолжить выполнение вашей программы, то есть он не блокируется.Без таймаута такие функции, как recv()
или recvfrom()
могут блокироваться навсегда.
Если вы хотите задать 2-секундный интервал (или блок ) между вызовами recvfrom()
и sendto()
, поместите sleep (2); (или, если в Windows, оператор Sleep (2000); ) где-то в вашем цикле, возможно, в нижней части.
while(1){
...
}
sleep(2); //or on Windows, Sleep(2000);
}
BTWТакже рекомендуется регулярно проверять возвращаемое значение любой функции, которая имеет такую функцию, в частности, если сбой этой функции приведет к хаосу в остальной части вашего кода.Например:
if (setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, sizeof(struct timeval)) < 0) {
perror("Error");
}
...
Несколько связанных тем: