TIRDWR(7) TIRDWR(7) НАЗВАНИЕ tirdwr - ПОТОКОВЫЙ модуль интерфейса ввода/вывода для Транспортного Интерфейса ОПИСАНИЕ Tirdwr - это ПОТОКОВЫЙ модуль, обеспечивающий дополни- тельный интерфейс к транспортному протоколу, выполняю- щему функции Транспортного Интерфейса библиотеки сете- вых услуг. Этот дополнительный интерфейс дает возмож- ность пользователю взаимодействовать с транспортным протоколом с помощью системных вызовов read(2) и wri- te(2). Системные вызовы putmsg(2) и getmsg(2) при этом можно использовать только для обмена данными между пользователем и потоком. Модуль tirdwr должен использоваться в потоке, который завершается модулем транспортного протокола, обеспечи- вающим Транспортный Интерфейс [см. I_PUSH в streamio(7)]. После того, как модуль tirdwr помещается в поток, функции Транспортного Интерфейса становятся недоступными, попытка обращения к какой-нибудь функции Транспортного Интерфейса вызывает ошибку в потоке, при этом все последующие обращения к потоку заканчиваются неудачей, а переменной errno присваивается значение EPROTO. Ниже описываются действия, которые выполняет модуль tirdwr, когда его помещают в поток [см. I_PUSH в streamio(7)], удаляют из потока [см. I_POP в streamio(7)], а также при прохождении через него дан ных. Помещение модуля в поток Когда модуль tirdwr помещается в поток, он выпол- няет проверку всех существующих сообщений для дан ного пользователя, чтобы гарантировать их полноту и целостность. Игнорируются все сообщения, влияю- щие на управление процессами, например, сообщения, генерирующие сигналы процессам, связанным с пото- ком. Если обнаруживается какое-нибудь другое сооб- щение, I_PUSH завершается неудачей, а переменной errno присваивается значение EPROTO. Запись в поток Модуль tirdwr выполняет следующие действия над данными, записываемыми в поток с помощью системно- го вызова write(2): 1. Все сообщения, имеющие область данных нулевой длины, удаляются из потока и вниз не передают- ся. 2. Все остальные сообщения, за исключением тех, которые содержат управляющую область [см. putmsg(2) и getmsg(2)], без изменений передают- ся вниз соседнему модулю потока. 3. Все сообщения, имеющие управляющую область, вы зывают ошибку в потоке, при этом все последую щие обращения к потоку заканчиваются неудачей, а переменной errno присваивается значение EPROTO. Чтение из потока Модуль tirdwr выполняет следующие действия над данными, поступающими от модуля транспортного про- токола: 1. Все сообщения, за исключением тех, которые со- держат управляющую область [см. putmsg(2) и getmsg(2)], без изменений передаются вверх со- седнему модулю потока. 2. Все сообщения, имеющие область данных нулевой длины, удаляются из потока и вверх не передают- ся. 3. Сообщения, имеющие управляющую область, вызыва- ют следующие действия: 3.1. Сообщения, задающие ускоренную передачу, вызывают ошибку в потоке, при этом все последующие обращения к потоку заканчива ются неудачей, а переменной errno присваи вается значение EPROTO. 3.2. В сообщениях, имеющих и управляющую об- ласть, и область данных, перед передачей сообщения наверх соседнему модулю управля- ющая область удаляется. 3.3. Сообщение от модуля транспортного протоко- ла, свидетельствующее о нормальном завер шении соединения, сгенерирует сообщение с пустой управляющей областью и областью данных нулевой длины, представляющее конец файла. Это сообщение посылается пользова- телю, читающему из потока. Само сообщение о нормальном завершении соединения удаля- ется из потока. 3.4. Сообщение от модуля транспортного протоко- ла, свидетельствующее об аварийном завер шении соединения, приводят к тому, что все последующие обращения к потоку с помощью системных вызовов write(2) и putmsg(2) з канчиваются неудачей с присваиванием пере- менной errno значения ENXIO. Обращения к потоку с помощью системных вызовов read(2) и getmsg(2), после того, как все имеющиеся данные будут считаны, вернут сообщение с областью данных нулевой длины, представля- ющее конец файла. 3.5. Все остальные сообщения с непустой управ- ляющей областью вызывают ошибку в потоке, при этом все последующие обращения к пото- ку заканчиваются неудачей, а переменной errno присваивается значение EPROTO. Удаление модуля из потока Когда модуль tirdwr удаляется из потока, а также при закрытии потока выполняются следующие дейст вия: 1. Если ранее было получено сообщение, свидетель- ствующее о нормальном завершении соединения, на удаленную сторону соединения на транспорт ном уровне посылается сообщение о нормальном завершении соединения. 2. Если ранее было получено сообщение, свидетель ствующее об аварийном завершении соединения, не делается ничего. 3. Если сообщений о завершении соединения получе- но не было, на удаленную сторону соединения на транспортном уровне посылается сообщение об аварийном завершении соединения. 4. Если в потоке обнаружена ошибка и ранее было получено сообщение, свидетельствующее об ава- рийном завершении соединения, на удаленную сторону соединения на транспортном уровне по- сылается сообщение об аварийном завершении со- единения. СМ. ТАКЖЕ streamio(7), timod(7). intro(2), getmsg(2), putmsg(2), read(2), write(2), intro(3) в Справочнике программиста.