Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3]      все
 Re: Напрягает разрыв соединения после гибернации. С этим что-то можно сделать?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48163

rdb_dev
достаточно запустить эту подсистему в разных потоках по количеству привязок

Мнда...

Posted via ActualForum NNTP Server 1.5

15 авг 19, 17:17    [21950359]     Ответить | Цитировать Сообщить модератору
 Re: Напрягает разрыв соединения после гибернации. С этим что-то можно сделать?  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2929
Basil A. Sidorov
Сделай патч, если это так тривиально - делов-то ...
Не выйдет! Обёртка на виртуальных методах C++.
15 авг 19, 21:58    [21950532]     Ответить | Цитировать Сообщить модератору
 Re: Напрягает разрыв соединения после гибернации. С этим что-то можно сделать?  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2929
Dimitry Sibiryakov
rdb_dev
достаточно запустить эту подсистему в разных потоках по количеству привязок
Мнда...
Ты знаешь другой способ "слушать" сокеты? Я таких не знаю... Даже реализация под вендой через сообщения, мьютексы и т.д. является лишь обёрткой, работающей с сокетами в отдельном потоке через стандартный сишный API.
15 авг 19, 22:02    [21950536]     Ответить | Цитировать Сообщить модератору
 Re: Напрягает разрыв соединения после гибернации. С этим что-то можно сделать?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48163

rdb_dev
Ты знаешь другой способ "слушать" сокеты?

select() в одном потоке. Или WSAEventSelect(), но у него есть свои мухи на большом
количестве сокетов и высокой нагрузке. В свежих версиях они пилят epoll(), но он ещё глючит.

Posted via ActualForum NNTP Server 1.5

15 авг 19, 22:06    [21950541]     Ответить | Цитировать Сообщить модератору
 Re: Напрягает разрыв соединения после гибернации. С этим что-то можно сделать?  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2929
Dimitry Sibiryakov, мелкософтовая WSAEventSelect(), это, как раз, та самая обёртка, о которой я писал. На мой взгляд, лучше крутить опрос сокетов "вручную" и для разных привязок использовать разные потоки, чтобы вносить в имеющийся код меньше переделок и, в большинстве случаев, использовать один поток опроса на один буфер адаптера.

Ко всему прочему, вчера я наткнулся на конфликт firebird.conf, когда проверял соединение с отключенным шифрованием. Если клиенты для 2.5.9 и 4.0b1 находятся в одном каталоге под разными именами и там же лежит firebird.conf для 4.0b1, клиент 2.5.9 отказывается подключаться, но как только убираешь из файла firebird.conf все активные параметры, кроме тех, которых нет в 2.5.9 или вовсе удаляешь файл firebird.conf, то подключение происходит нормально. Казалось бы, fbclient должен читать тот firebird.conf, что на уровень выше, а нет... Таким образом, параметр с привязками, игнорируемый клиентом и перекрывающий для сервера старые параметры привязки, стал бы решением.
16 авг 19, 10:07    [21950752]     Ответить | Цитировать Сообщить модератору
 Re: Напрягает разрыв соединения после гибернации. С этим что-то можно сделать?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48163

rdb_dev
мелкософтовая WSAEventSelect(), это, как раз, та самая обёртка, о которой я писал

А, значит ты как обычно писал нагугленную чушь.

Posted via ActualForum NNTP Server 1.5

16 авг 19, 12:15    [21950908]     Ответить | Цитировать Сообщить модератору
 Re: Напрягает разрыв соединения после гибернации. С этим что-то можно сделать?  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9302
rdb_dev
Казалось бы, fbclient должен читать тот firebird.conf, что на уровень выше, а нет
... понимания изменений FB 3.0+ под виндой.
16 авг 19, 12:40    [21950928]     Ответить | Цитировать Сообщить модератору
 Re: Напрягает разрыв соединения после гибернации. С этим что-то можно сделать?  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2929
Basil A. Sidorov
rdb_dev
Казалось бы, fbclient должен читать тот firebird.conf, что на уровень выше, а нет
... понимания изменений FB 3.0+ под виндой.
Я, таки, не понял, что ты имеешь в виду. Разве fbclient 2.5.x не хавает firebird.msg и firebird.conf каталогом выше, при том, что fbclient 3.0+ привычно хавает те же файлы в том же каталоге, где находится сам?
16 авг 19, 13:05    [21950969]     Ответить | Цитировать Сообщить модератору
 Re: Напрягает разрыв соединения после гибернации. С этим что-то можно сделать?  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2929
Dimitry Sibiryakov
rdb_dev
мелкософтовая WSAEventSelect(), это, как раз, та самая обёртка, о которой я писал
А, значит ты как обычно писал нагугленную чушь.
Нет, это моё личное мнение исходя из наблюдений работы этой функции. Мелкософт упростила жизнь разработчикам, написав за них эту обёртку и собрав её в ту же библиотеку, что и Беркли сокеты - ws2_32.dll. Чудес не бывает...
16 авг 19, 13:23    [21950987]     Ответить | Цитировать Сообщить модератору
 Re: Напрягает разрыв соединения после гибернации. С этим что-то можно сделать?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48163

rdb_dev
это моё личное мнение исходя из наблюдений работы этой функции

И тебя не смущает, что она оперирует очередью событий непосредственно из драйвера, а
потому несёт больше информации чем select(), который, по твоим словам, она оборачивает?..

Posted via ActualForum NNTP Server 1.5

16 авг 19, 13:32    [21951003]     Ответить | Цитировать Сообщить модератору
 Re: Напрягает разрыв соединения после гибернации. С этим что-то можно сделать?  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2929
Dimitry Sibiryakov, из драйвера чего? Сетевой карты? Ты уверен в том, что тоже самое сообщение из драйвера насквозь прилетает в event object? Зачем же тогда функция WSAEventSelect переводит сокеты в nonblocking mode, если получает всю необходимую информацию прямо из драйвера?

"The WSAEventSelect function automatically sets socket s to nonblocking mode, regardless of the value of lNetworkEvents. To set socket s back to blocking mode, it is first necessary to clear the event record associated with socket s via a call to WSAEventSelect with lNetworkEvents set to zero and the hEventObject parameter set to NULL. You can then call ioctlsocket or WSAIoctl to set the socket back to blocking mode."
16 авг 19, 13:40    [21951012]     Ответить | Цитировать Сообщить модератору
 Re: Напрягает разрыв соединения после гибернации. С этим что-то можно сделать?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48163

rdb_dev
Зачем же тогда функция WSAEventSelect переводит сокеты в nonblocking mode, если получает
всю необходимую информацию прямо из драйвера?

Хороший вопрос на который я не знаю ответа. А у тебя есть ответ зачем нужен неблокирующий
режим при использовании унутре select-а?

Posted via ActualForum NNTP Server 1.5

16 авг 19, 13:49    [21951025]     Ответить | Цитировать Сообщить модератору
 Re: Напрягает разрыв соединения после гибернации. С этим что-то можно сделать?  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2929
Dimitry Sibiryakov, конечно есть! Чтобы в цикле по сокетам дёргать POSIX функции сокетов, которые тут же возвращают состояние и анализируя эти состояния посылать те или иные windows messages соответствующим event objects.
16 авг 19, 13:55    [21951036]     Ответить | Цитировать Сообщить модератору
 Re: Напрягает разрыв соединения после гибернации. С этим что-то можно сделать?  [new]
WildSery
Member

Откуда: да, оттуда.
Сообщений: 16403
Dimitry Sibiryakov,

У него на любой вопрос всегда есть любой ответ.
16 авг 19, 13:57    [21951038]     Ответить | Цитировать Сообщить модератору
 Re: Напрягает разрыв соединения после гибернации. С этим что-то можно сделать?  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2929
Dimitry Sibiryakov, разница между WSAEventSelect() и select() лишь в том, что в первом случае ьы получаешь два параллельных цикла - в WSAEventSelect() и в WSAWaitForMultipleEvents(), а во втором случае - два последовательных цикла, первый, собственно, в select(), а второй - свой цикл, в котором нужно обработать массив после выхода из select().
16 авг 19, 14:08    [21951050]     Ответить | Цитировать Сообщить модератору
 Re: Напрягает разрыв соединения после гибернации. С этим что-то можно сделать?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48163

rdb_dev
Чтобы в цикле по сокетам дёргать POSIX функции сокетов, которые тут же возвращают
состояние и анализируя эти состояния посылать те или иные windows messages соответствующим
event objects.

Прелестно, но в каком потоке крутится этот цикл и почему его не видно в стэке вызовов?

Posted via ActualForum NNTP Server 1.5

16 авг 19, 14:08    [21951052]     Ответить | Цитировать Сообщить модератору
 Re: Напрягает разрыв соединения после гибернации. С этим что-то можно сделать?  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2929
Dimitry Sibiryakov, как это "не видно"? WSAEventSelect крутит цикл в том же потоке из которого ты её вызвал.
16 авг 19, 14:15    [21951060]     Ответить | Цитировать Сообщить модератору
 Re: Напрягает разрыв соединения после гибернации. С этим что-то можно сделать?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48163

rdb_dev
как это "не видно"?

Да вот так: я смотрю в Call Stack моего процесса в Process Explorer и не вижу ни цикла, ни
потребляемых тиков процессора.

rdb_dev
WSAEventSelect крутит цикл в том же потоке из которого ты её вызвал.

WSAEventSelect вызывается для сокета ровно один раз и сразу возвращает управление мне.
Дальше всюду работает мой код.

Posted via ActualForum NNTP Server 1.5

16 авг 19, 14:18    [21951062]     Ответить | Цитировать Сообщить модератору
 Re: Напрягает разрыв соединения после гибернации. С этим что-то можно сделать?  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2929
Dimitry Sibiryakov
rdb_dev
как это "не видно"?
Да вот так: я смотрю в Call Stack моего процесса в Process Explorer и не вижу ни цикла, ни
потребляемых тиков процессора.
rdb_dev
WSAEventSelect крутит цикл в том же потоке из которого ты её вызвал.

WSAEventSelect вызывается для сокета ровно один раз и сразу возвращает управление мне.
Дальше всюду работает мой код.
Возможно, я перепутал работу этой функции с работой какой-то другой обёртки сокетов от MS, но принципиально это ничего не меняет - всегда есть некий массив хэндлов сокетов, по которому в цикле кто-то пробегает и опрашивая состояния неблокируемых сокетов инициирует те или иные действия меняющие состояния неких структур, отражающих состояния сокетов, а как ты анализируешь эти состояния - пробегая по массиву fd_set или по массиву объектов WSAEVENT, это уже малосущественные детали реализации. Как я уже говорил - тут чудес не бывает (если ты не используешь собственный NDIS драйвер).
16 авг 19, 14:46    [21951091]     Ответить | Цитировать Сообщить модератору
 Re: Напрягает разрыв соединения после гибернации. С этим что-то можно сделать?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48163

rdb_dev
всегда есть некий массив хэндлов сокетов, по которому в цикле кто-то пробегает и опрашивая
состояния неблокируемых сокетов инициирует те или иные действия меняющие состояния неких
структур, отражающих состояния сокетов

То есть вариант таблицы сокетов к которым внутри привязана очередь и эвент, которые
заполняются/взводятся непосредственно после приёма пакета тебе даже в голову не приходит?..

Posted via ActualForum NNTP Server 1.5

16 авг 19, 14:56    [21951097]     Ответить | Цитировать Сообщить модератору
 Re: Напрягает разрыв соединения после гибернации. С этим что-то можно сделать?  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2929
Dimitry Sibiryakov, неа.
Само по себе ничего не взводится. Всегда где-то существует цикл, пробегающий по некоему ассоциативному массиву хэндлов неблокируемых сокетов и неких структур, в которых отмечается состояние сокетов.
16 авг 19, 15:05    [21951108]     Ответить | Цитировать Сообщить модератору
 Re: Напрягает разрыв соединения после гибернации. С этим что-то можно сделать?  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2929
Dimitry Sibiryakov, по всей видимости, WSAEventSelect() используется лишь как инструмент для добавления пары socket handle/event object к ассоциативному массиву некой обёртки, внутри которой и крутится цикл, опрашивающий состояния неблокируемых сокетов и меняющий состояния ассоциированных с ними event objects. Потому WSAEventSelect() и переводит сокеты в неблокируемый режим, чтобы у обёртки была возможность при вызове некоей внутренней реализации чего-то, похожего на вызов select() с параметром timeout, указывающим на TIMEVAL{0,0}.
16 авг 19, 15:28    [21951132]     Ответить | Цитировать Сообщить модератору
 Re: Напрягает разрыв соединения после гибернации. С этим что-то можно сделать?  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9302
rdb_dev
Как я уже говорил - тут чудес не бывает (если ты не используешь собственный NDIS драйвер).
Проблема только в том, что MS "кое-что меняла" и в драйверах и "вокруг них".
17 авг 19, 02:33    [21951587]     Ответить | Цитировать Сообщить модератору
 Re: Напрягает разрыв соединения после гибернации. С этим что-то можно сделать?  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2929
Basil A. Sidorov, "кое-что"1, MS, конечно, меняла, а что-то2 даже добавила, но тесной интеграции пользовательских процессов с ядром ждать точно не стоит.

---
1 What's New for Windows Sockets
2 Registered Input/Output (RIO) API Extensions
17 авг 19, 11:54    [21951659]     Ответить | Цитировать Сообщить модератору
 Re: Напрягает разрыв соединения после гибернации. С этим что-то можно сделать?  [new]
rdb_dev
Member

Откуда: с болот
Сообщений: 2929
WildSery
Dimitry Sibiryakov, У него на любой вопрос всегда есть любой ответ.
Тебя что-то смущает?
18 авг 19, 01:27    [21951880]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3]      все
Все форумы / Firebird, InterBase Ответить