TIRDWR(7) TIRDWR(7)
НАЗВАНИЕ
tirdwr - модуль псевдоустройства интерфейса ввода/выво-
да для Транспортного Интерфейса
ОПИСАНИЕ
Tirdwr - это модуль псевдоустройства, обеспечивающий
дополнительный интерфейс к транспортному протоколу, вы-
полняющему функции Транспортного Интерфейса библиотеки
сетевых услуг. Этот дополнительный интерфейс дает воз-
можность пользователю взаимодействовать с транспортным
протоколом с помощью системных вызовов read(2) и
write(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) в Справочнике программиста.
|