Проблема Select под Debian

Общие вопросы программирования, алгоритмы и т.п.

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

Ответить
CRobin
постоялец
Сообщения: 145
Зарегистрирован: 26.01.2016 11:15:39

Проблема Select под Debian

Сообщение CRobin »

Здравствуйте. Не могу разобраться с функцией проверки сокетов Select на Дебиан

Код: Выделить всё

  function  mySelect  (s:cint; readfds, writefds, exceptfds: PFDSet; timeout: ptimeval_1): cint; cdecl; overload; external API name 'select';           


1) Не корректно работает следующий код, результат выполнения не предсказуем:

Код: Выделить всё

    select := mySelect(self.max_socket+1, @self.MasterFD, nil, nil, @self.timeout);  


Начинает корректно работать если перед вызовом делать переприсваивание аргументов

Код: Выделить всё

    self.TempFD := self.MasterFD;
    tv          := self.timeout;
    select := mySelect(self.max_socket+1, @self.TempFD, nil, nil, @tv);   


2) Не могу понять что означает первый аргумент. Под Windows он никакого значения не имеет, в чем его смысл под Дебиан?
Аватара пользователя
Дож
энтузиаст
Сообщения: 900
Зарегистрирован: 12.10.2008 16:14:47

Сообщение Дож »

1) Нужно знать как объявлены и проинициализированы все переменные (self.MasterFD, self.timeout, self.TempFD, tv)
2) Первый аргумент используется внутри функции select для того, чтобы не перебирать все 256 бит в дескрипторных множествах (как правило, используемые в select дескрипторы не очень большие)
CRobin
постоялец
Сообщения: 145
Зарегистрирован: 26.01.2016 11:15:39

Сообщение CRobin »

Дож типы подбирал эмпирически, пока не заработало, подобный финт с переприсвоением я встречал у других авторов, к сожалению спросить у них нет возможности.
Аватара пользователя
Дож
энтузиаст
Сообщения: 900
Зарегистрирован: 12.10.2008 16:14:47

Сообщение Дож »

Тогда могу только пожелать успехов в эмпирическом подборе работающего кода.
mig-31
постоялец
Сообщения: 224
Зарегистрирован: 14.07.2011 13:46:48

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

Смотрите man Linux.
CRobin
постоялец
Сообщения: 145
Зарегистрирован: 26.01.2016 11:15:39

Сообщение CRobin »

mig-31 ткните носом в ман для Ubuntu 16.04, а то я маны читать не умею, а когда читаю, то не верю написанному и предпочитаю действовать наугад. Намного веселее и приятнее потратить на решение проблемы два дня и иметь сомнительный результат, чем тупо взять ман и за пять минут получить решение, которое гарантировано работает.
MysticCoder
постоялец
Сообщения: 154
Зарегистрирован: 14.09.2013 00:20:28

Сообщение MysticCoder »

Дож писал(а):
Re: Проблема Select под Debian

Непрочитанное сообщение Дож » 09.02.2017 19:38:31
1) Нужно знать как объявлены и проинициализированы все переменные (self.MasterFD, self.timeout, self.TempFD, tv)


+
Ответить