Здравствуйте! Возник вопрос касательно работы именованных каналов в локальной сети с асинхронным вводом-выводом. Допустим мы сделали запрос на чтение/запись 128 Кб данных. Может ли быть такое, что запрос завершится удачно, но данные будут прочитаны/записаны не все? Например GetOverlappedResult вернет TRUE, но в lpNumberOfBytesTransferred будет возвращено только 64 Кб. То есть потребуется дочитать/дописать данные.
Andrey333, А что за каналы, сеть работает через драйверные запросы(IOCTL). Пайпы это тормозной механизм IPC(никто адекватный это не юзает), используется как RPC для того же межпроцессорного обмена данными. Но а сеть то причём, там ядерные запросы в соккетах. --- Сообщение объединено, 31 янв 2020 --- > Допустим мы сделали запрос на чтение/запись 128 Кб данных. Куда конкретно запись(посылка пакета I/O) ? ps: нужно видимо исходить что человек не понимает что спрашивает, 100k/s.. это обмен по rs232
Я имел ввиду named pipes. Они могут работать по сети. Предпочел пайпы, т. к. они позволяют настроить права доступа, в отличии от сокетов. Например: 1) Вызываем API ReadFile, в параметре nNumberOfBytesToRead передаем 128*1024 2) Ждем на OVERLAPPED.hEvent 3) Cобытие устанавливается в сигнальное состояние. Может ли быть так что в OVERLAPPED.InternalHigh < 128*1024, но при этом SUCCEEDED(OVERLAPPED.Internal) == TRUE?
Andrey333, Да, пайпы. Я про это сказал выше. Только небольшая опечатка как вижу, не межпроцессорного, а межпроцессного". Впрочем это ясно по контексту. > Cобытие устанавливается в сигнальное состояние. Может ли быть так что в OVERLAPPED.InternalHigh < 128*1024 Кто его знает, так не делается. Это асинхронные ожидания, не вполне ясно как ос с ними работает. Обычно ожидание происходит в другом потоке на конкретном обьекте, но не в функции IO, как обратный вызов. Вероятно что манипулируя этим механизмом ты можешь подвесить поток ожидания. Лучше выбери явный механизм ожидания, пусть лучше будет второй поток, чем использован сомнительный механизм.
есть Mojo(IPC-двигло) как компонент того же Chrome и Chromium - там разумеется и исходники, в частности под винду.
Отвечаю сам на свой вопрос. Протестировал. Логи показали что такое возможно! Так что нужно учитывать. Да, ты прав. Я с этим как-то уже сталкивался. Только зачем второй поток? Ведь можно задать тайм-аут функции ожидания.