Страница 1 из 1

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

СообщениеДобавлено: 09.02.2017 19:27:16
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 он никакого значения не имеет, в чем его смысл под Дебиан?

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

СообщениеДобавлено: 09.02.2017 19:38:31
Дож
1) Нужно знать как объявлены и проинициализированы все переменные (self.MasterFD, self.timeout, self.TempFD, tv)
2) Первый аргумент используется внутри функции select для того, чтобы не перебирать все 256 бит в дескрипторных множествах (как правило, используемые в select дескрипторы не очень большие)

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

СообщениеДобавлено: 09.02.2017 20:03:03
CRobin
Дож типы подбирал эмпирически, пока не заработало, подобный финт с переприсвоением я встречал у других авторов, к сожалению спросить у них нет возможности.

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

СообщениеДобавлено: 09.02.2017 20:17:55
Дож
Тогда могу только пожелать успехов в эмпирическом подборе работающего кода.

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

СообщениеДобавлено: 09.02.2017 20:37:13
mig-31
Смотрите man Linux.

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

СообщениеДобавлено: 09.02.2017 21:30:58
CRobin
mig-31 ткните носом в ман для Ubuntu 16.04, а то я маны читать не умею, а когда читаю, то не верю написанному и предпочитаю действовать наугад. Намного веселее и приятнее потратить на решение проблемы два дня и иметь сомнительный результат, чем тупо взять ман и за пять минут получить решение, которое гарантировано работает.

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

СообщениеДобавлено: 11.02.2017 18:36:13
MysticCoder
Дож писал(а):
Re: Проблема Select под Debian

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


+