ISSN 2305-5626. Вестник МГТУ им. Н.Э. Баумана: электронное издание. 2013
11
Таблица 4
Обнаружение ошибок при вызове
read( )
Вид ошибки
Признак ошибки
Используемые данные
Чтение из одного и того
же сокета в разных
процессах или потоках
Сокет является клиент-
ским. Он обслуживает-
ся другим процессом
Уникальный дескрип-
тор сокета. Данные си-
стемного вызова
Блокирующее чтение
Сокет находится
в состоянии «Нет дан-
ных». Сокет в блоки-
рующем режиме
Дескриптор сокета
Блокирование потока
или процесса до чтения
из готового сокета
Процесс находится
в состоянии блокировки
Дескриптор процесса
Необходим способ, позволяющий определить, является сокет
клиентским или серверным, т. е. созданным сервером для получения
соединений. Последний может использоваться в вызовах
select( )
для ожидания чтения в нескольких процессах или потоках. Клиент-
ские сокеты могут обслуживаться только в одном потоке, иное явля-
ется критической ошибкой.
Рис. 10. Действия метода в контексте планировщика задач
Клиентские сокеты должны иметь установленный флаг «Отсле-
живать мультиплексирование» в своем уникальном дескрипторе. Си-
стемным вызовом, который мог бы устанавливать его, может слу-
жить вызов
accept( )
.
В диаграмме состояний процесса (см. рис. 4) имеется событие
«Блокирование». Чтобы определить факт его наступления, можно
1...,2,3,4,5,6,7,8,9,10 12,13,14,15