Unix Man (Справочное руководство)

         

TIRDWR(7)


TIRDWR(7)

НАЗВАНИЕ


tirdwr - модуль псевдоустройства интерфейса ввода/вывода для Транспортного Интерфейса

ОПИСАНИЕ


Tirdwr - это модуль псевдоустройства, обеспечивающий дополнительный интерфейс к транспортному протоколу, выполняющему функции Транспортного Интерфейса библиотеки сетевых услуг. Этот дополнительный интерфейс дает возможность пользователю взаимодействовать с транспортным протоколом с помощью системных вызовов и . Системные вызовы и при этом можно использовать только для обмена данными между пользователем и потоком.

Модуль tirdwr должен использоваться в потоке, который завершается модулем транспортного протокола, обеспечивающим Транспортный Интерфейс [см. I_PUSH в ]. После того, как модуль tirdwr помещается в поток, функции Транспортного Интерфейса становятся недоступными, попытка обращения к какой-нибудь функции Транспортного Интерфейса вызывает ошибку в потоке, при этом все последующие обращения к потоку заканчиваются неудачей, а переменной errno присваивается значение EPROTO.

Ниже описываются действия, которые выполняет модуль tirdwr, когда его помещают в поток [см. I_PUSH в ], удаляют из потока [см. I_POP в ], а также при прохождении через него данных.

Помещение модуля в поток Когда модуль tirdwr помещается в поток, он выполняет проверку всех существующих сообщений для данного пользователя, чтобы гарантировать их полноту и целостность. Игнорируются все сообщения, влияющие на управление процессами, например, сообщения, генерирующие сигналы процессам, связанным с потоком. Если обнаруживается какое-нибудь другое сообщение, I_PUSH завершается неудачей, а переменной errno присваивается значение EPROTO. Запись в поток Модуль tirdwr выполняет следующие действия над данными, записываемыми в поток с помощью системного вызова :

  1. Все сообщения, имеющие область данных нулевой длины, удаляются из потока и вниз не передаются.
  2. Все остальные сообщения, за исключением тех, которые содержат управляющую область [см. и ], без изменений передаются вниз соседнему модулю потока.
  3. Все сообщения, имеющие управляющую область, вызывают ошибку в потоке, при этом все последующие обращения к потоку заканчиваются неудачей, а переменной errno присваивается значение EPROTO.


Чтение из потока Модуль tirdwr выполняет следующие действия над данными, поступающими от модуля транспортного протокола:


  1. Все сообщения, за исключением тех, которые содержат управляющую область [см. и ], без изменений передаются вверх соседнему модулю потока.
  2. Все сообщения, имеющие область данных нулевой длины, удаляются из потока и вверх не передаются.
  3. Сообщения, имеющие управляющую область, вызывают следующие действия:


    • Сообщения, задающие ускоренную передачу, вызывают ошибку в потоке, при этом все последующие обращения к потоку заканчиваются неудачей, а переменной errno присваивается значение EPROTO.
    • В сообщениях, имеющих и управляющую область, и область данных, перед передачей сообщения наверх соседнему модулю управляющая область удаляется.
    • Сообщение от модуля транспортного протокола, свидетельствующее о нормальном завершении соединения, сгенерирует сообщение с пустой управляющей областью и областью данных нулевой длины, представляющее конец файла. Это сообщение посылается пользователю, читающему из потока. Само сообщение о нормальном завершении соединения удаляется из потока.
    • Сообщение от модуля транспортного протокола, свидетельствующее об аварийном завершении соединения, приводят к тому, что все последующие обращения к потоку с помощью системных вызовов и заканчиваются неудачей с присваиванием переменной errno значения ENXIO. Обращения к потоку с помощью системных вызовов и , после того, как все имеющиеся данные будут считаны, вернут сообщение с областью данных нулевой длины, представляющее конец файла.
    • Все остальные сообщения с непустой управляющей областью вызывают ошибку в потоке, при этом все последующие обращения к потоку заканчиваются неудачей, а переменной errno присваивается значение EPROTO.


    Удаление модуля из потока Когда модуль tirdwr удаляется из потока, а также при закрытии потока выполняются следующие действия:


    1. Если ранее было получено сообщение, свидетельствующее о нормальном завершении соединения, на удаленную сторону соединения на транспортном уровне посылается сообщение о нормальном завершении соединения.
    2. Если ранее было получено сообщение, свидетельствующее об аварийном завершении соединения, не делается ничего.
    3. Если сообщений о завершении соединения получено не было, на удаленную сторону соединения на транспортном уровне посылается сообщение об аварийном завершении соединения.
    4. Если в потоке обнаружена ошибка и ранее было получено сообщение, свидетельствующее об аварийном завершении соединения, на удаленную сторону соединения на транспортном уровне посылается сообщение об аварийном завершении соединения.


    СМ. ТАКЖЕ



    , .

    , , , , , в Справочнике программиста.


    Содержание раздела