LINUX.ORG.RU

Файл есть все? Функция sys_socket(3).

 , ,


1

2

Доброе/ый утро/день/вечер!

В исходниках /net/socket.c есть вызов

err = sys_socket(a0, a1, a[2]);
Но реализацию, никак не могу найти (пробовал даже http://elixir.free-electrons.com/linux/latest/ident/sys_socket). Где ее искать?

Ознакомившись с sockets API впал в когнитивный диссонанс...

Смущает реализация AF_INET при которой конечные точки подключения не отображаются на ФС. Получается, что «все есть файл» здесь не работает? Почему интерфес для работы с tcp так отличается от всего остального? write/read/ioctl разве не достаточно?



Последнее исправление: cyber_eagle (всего исправлений: 1)

в очень древних системах были /dev/tcp и другое.

Логика работы с сетевыми сокетами отличается от работы с файлами.

accept() как изображать с файлами ?

vel ★★★★★
()
Ответ на: комментарий от vel

в очень древних системах были /dev/tcp и другое.

В не очень древних шеллах (например bash) есть задокументированная форма перенаправления в/из /dev/{tcp,udp}/host/port. Естественно, /dev/tcp/*/* не существует (с точки зрения VFS), но это нисколько не мешает получить на нём файловый дескриптор.

d_a ★★★★★
()

Но реализацию, никак не могу найти

Не там искал: socketcall уже не используется. socket имеет собственный номер 41:

cat syscall_64.tbl | grep socket
41	common	socket			sys_socket

Соответственно определение «SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol)» в net/socket.c

cyber_eagle
() автор топика
Ответ на: комментарий от d_a

От отображения в ФС сокетов можно было бы получить такие плюшки, как подмену оного для процесса, или запись в один сокет несколькими процессами, и все то, что получаем от использования спец файлов. Печально, что такие, как план9 находятся «в коме»...

cyber_eagle
() автор топика
Ответ на: комментарий от cyber_eagle

Маловато юзкейзов для записи в файл несколькими процессами. Голые структуры по tcp беспорядочно не гоняют, там как правило какой-то протокол есть. Если писать просто в файл - этот протокол станет соблюдать сложно. Вот абстракции поверх более высокоуровневых протоколов (read /dev/https/ru.org.linux/topic/10) уже более осмысленны. Потом начнутся абстракции поверх хттп, и весь этот слоеный пирог станет сложным. Имхо тут унификация не к месту.

P.S. Чо уж там, человечество даже абстрагировать файловую систему для передачи по сети не смогло одинаково: вагон реализаций CIFS, NFS и крайне плохо ложатся на единую файловую абстракцию, хотя, казалось бы...

anonymous
()
Ответ на: комментарий от cyber_eagle

запись в один сокет несколькими процессами

Сокеты и так можно передавать между процессами (да, кода больше чем при обращении к ФС, зато есть какая-то секьюрность)

annulen ★★★★★
()

Где-то в plan9/infern-ах встречалась более полное описание примитивов, из которых состоит «всё». Привычный файл - частный случай, в котором некоторые из упомянутых примитивов объединены в один вызов(типа open=socket . bind . connect). Для большинства применений эпохи придумывания ОС этой модели почти хватало.

DonkeyHot ★★★★★
()
Последнее исправление: DonkeyHot (всего исправлений: 1)
Ответ на: комментарий от DonkeyHot

в plan9 есть IPC с интерфейсом файловой системы. И обычный файл там - IPC-интерфейс специального процесса, работающего с жестким диском.

cvs-255 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.