Тайм-ауты сокетов в Убунте

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
ElectroGuard
новенький
Сообщения: 71
Зарегистрирован: 03.06.2016 11:10:22

Тайм-ауты сокетов в Убунте

Сообщение ElectroGuard »

Добрый всем день. Скажите - нормально ли работают тайм-ауты на сокетах в Убунте?
Проблемы две. Во-первых - пытаюсь установить тайм-аут:
Socket.SetRecvTimeout >
synsock.SetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_RCVTIMEO), @timeval, SizeOf(timeval));
мне возвращается ошибка 22, EINVAL - invalid argument, передавал в либу таймаут = 100000.
Также необходимо вызывать Socket.CanRead, пытался делать это с параметром 0 либо 1 - в обоих случаях получал зависание, тайм-аут не срабатывает.
Под Windows оба случая работают нормально.
CRobin
постоялец
Сообщения: 145
Зарегистрирован: 26.01.2016 11:15:39

Сообщение CRobin »

потому что под линукс нужно специальную структуру передавать, а не целочисленное значение
ElectroGuard
новенький
Сообщения: 71
Зарегистрирован: 03.06.2016 11:10:22

Сообщение ElectroGuard »

timeval же и передаю - и ошибку возвращает
CRobin
постоялец
Сообщения: 145
Зарегистрирован: 26.01.2016 11:15:39

Сообщение CRobin »

1) Для корректной работы структура должна состоять из двух 8байтовых полей.
2) Кто нибудь знает почему система округляет значение tv_usec до миллисекунд. Например, если SetSockOpt tv_usec = 123456, то GetSockOpt tv_usec = 123000. Как быть, если таймаут нужно передать именно в микросекундах? И поддерживает ли ОС Ubuntu 16 такие таймауты?
mig-31
постоялец
Сообщения: 224
Зарегистрирован: 14.07.2011 13:46:48

Сообщение mig-31 »

Стандартно SystemClock=1kHz = 1msec. Раньше был параметер настройки ядра перед его компилярированием, где можно было выставить SystemClock = 1MHz для мульмедиа программ. Сейчас почти в каждом дистро есть готовое ядро с Real-Time расширением (Soft real time). Установите его должно помочь.
olegy123
долгожитель
Сообщения: 1643
Зарегистрирован: 25.02.2016 11:10:20

Сообщение olegy123 »

А почему нельзя использовать неблокирующий секет?
Ответить