Сокеты файловые. Вы можете использовать read
и write
на сокете: они эквивалентны вызову recv
и send
с flags=0
. Вы закрываете их close
. Вы можете перемещать их вместе с dup
друзьями, если вам нужно перемешать файловые дескрипторы. Вы можете установить некоторые флаги fcntl
и использовать буферизацию stdio после вызова fdopen
. Список можно продолжить. Очень важно, что вы можете вызывать select
и poll
для любого типа файла, включая сокеты, поэтому эти функции позволяют программе блокировать, пока она не получит ввод любым способом, просто перечислив дескрипторы файлов.
Существуют дополнительные системные вызовы для некоторых типов сокетов ( recv
и send
, shutdown
и т. Д.), Например, существует дополнительный системный вызов для устройств ( ioctl
).
Не все файлы имеют имена , и из тех, которые имеют, они не всегда живут в структуре каталогов. Каналы, созданные pipe
(например, в конвейере оболочки), и сокеты, созданные с помощью socketpair
, не имеют имен, но они по-прежнему являются файлами. Сокеты, созданные с помощью, socket
имеют имя, синтаксис которого зависит от домена. Это имя передается в struct sockaddr
к bind
и другим функциям. Для AF_UNIX
сокета Unix ( ) имя - это a struct sockaddr_un
, которое является семейством и строкой; в зависимости от строки это может быть имя файла (именованные сокеты могут создаваться mknod
во многих вариантах Unix) или нет (абстрактное пространство имен). Для AF_INET
сокета IPv4 ( ) это имя struct sockaddr_in
, содержащее номер порта и IP-адрес, а также protocol
от socket
вызова.