Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.12.36.30] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте!
Возник вопрос касательно работы именованных каналов в локальной сети с асинхронным вводом-выводом. Допустим мы сделали запрос на чтение/запись 128 Кб данных. Может ли быть такое, что запрос завершится удачно, но данные будут прочитаны/записаны не все? Например GetOverlappedResult вернет TRUE, но в lpNumberOfBytesTransferred будет возвращено только 64 Кб. То есть потребуется дочитать/дописать данные. |
Сообщ.
#2
,
|
|
|
Да, такое возможно. При работе с асинхронным вводом-выводом, когда используются буферы ограниченного размера, есть вероятность, что запрос завершится удачно, но количество переданных/принятых байтов будет меньше, чем запрашиваемое. Это может произойти, например, если буфер, в котором хранятся данные для передачи, заполнен не полностью, либо если приемный буфер был заполнен ранее принятыми данными.
Чтобы обработать такую ситуацию, в приложении можно использовать циклы для повторной передачи/приема данных до тех пор, пока не будет получено запрошенное количество данных, либо не будет достигнуто максимальное количество попыток. Также можно использовать буферы большего размера, чтобы уменьшить вероятность неполной передачи/приема данных. |