tv_sec
и tv_usec
являются знаковыми int
значениями, поэтому они могут быть отрицательными числами.
Если ваша структура является локальной переменной, она будет содержать все, что происходит в стеке.
В select
доля времени в секундах рассчитывается следующим образом (взято из исходного кода Linux ):
tv.tv_sec + (tv.tv_usec / USEC_PER_SEC)
Как видите, проверка не выполняетсясделал так, чтобы числа были положительными, поэтому, если неинициализированная переменная должна содержать большое отрицательное число, select
немедленно вернется.
Редактировать:
Использованиенеинициализированной переменной приводит к неопределенному поведению.То, что select
немедленно возвращается на одном компьютере, а не на другом, соответствует спецификации C.