Книга: UNIX: разработка сетевых приложений

Сокеты ядра Solaris 9

Сокеты ядра Solaris 9

Операционная система Solaris 2.x основывается на SVR4, и во всех версиях ранее 2.6 сокеты реализуются так, как показано на рис. 31.3. Однако во всех версиях SVR4 с подобными реализациями сокетов существует одна проблема: они редко обеспечивают полную совместимость с сокетами Беркли-ядер. Для обеспечения дополнительной совместимости в Solaris 2.6 способ реализации изменен за счет использования файловой системы sockfs. Такой подход обеспечивает поддержку сокетов ядра, что можно проверить с помощью программы truss на нашем клиенте (использующем сокеты).

solaris % truss -v connect daytimetcpcli 127.0.0.1
Mon Sep 8 12:16:42 2003

После обычного подключения библиотеки осуществляется первый системный вызов so_socket — системный вызов, инициированный нашим вызовом socket.

so_socket(PF_INET, SOCK_STREAM, IPPROTO_IP, 1) = 3
connect(3, 0xFFBFDEF0, 16, 1) = 0
AF_INET name = 127.0.0.1 port = 13
read(3, " M o n S e p 8 1", ... 4096) = 26
Mon Sep 8 12:48:06 2003
write(1, " M o n S e p 8 1", ... 26) = 26
read(3, 0xFFBFDF03, 4096) = 0
_exit(0)

Первые три аргумента системного вызова so_socket являются нашими аргументами socket.

Далее мы видим, что connect является системным вызовом, a truss при вызове с флагом -v connect выводит на экран содержимое структуры адреса сокета, на которую указывает второй аргумент (IP-адрес и номер порта). Мы не показываем системные вызовы, относящиеся к стандартным потокам ввода и вывода.

Оглавление книги

Оглавление статьи/книги

Генерация: 2.099. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз