Какие еще API сокетов доступны? Каковы различия между каждым из этих Socket API? - PullRequest
2 голосов
/ 15 января 2010

Все называли его «Программирование на сокете» или «Сетевое программирование на C», и мы начали использовать его, используя sys/socket.h & netinet/in.h. Мы думали, что это на 100% правда. Но вопрос, который возник у меня в голове, когда я увидел эту книгу

Межсетевое взаимодействие с TCP / IP, том III: клиент-серверное программирование и приложения, , который был доступен в 4 различных версиях

  1. Linux / POSIX Sockets
  2. Гнезда AT & T TLI (интерфейс транспортного уровня)
  3. BSD (Беркли) розетки
  4. Оконные розетки

Я в замешательстве. Это ясно показывает, что не существует стандарта для Socket API.

также я удивлен, увидев sys/socket.h & netinet/in.h, которые являются частью библиотеки POSIX C в http://en.wikipedia.org/wiki/Berkeley_sockets. Теперь я в замешательстве.

  1. Почему для этого нет стандарта?
  2. Какие еще API сокетов доступны?
  3. В чем различия между этими Socket API?
  4. Когда люди просто говорят «Сетевое программирование на С» / «Программирование на сокете», что именно они имеют в виду?
  5. Ссылки для получения дополнительной информации?

Ответы [ 4 ]

5 голосов
/ 16 января 2010

Почему для этого нет стандарта?

Фактическим стандартом являются сокеты BSD, на которых основаны API сокетов Linux, POSIX и Windows.

Какие еще API сокетов доступны?

Ничего, что все еще широко используется. До того, как сокеты BSD и их производные захватили мир, их было много. Большинство из оставшихся, вероятно, находятся во встроенном мире, и даже они уходят, поскольку основные операционные системы продолжают поглощать все больше и больше встроенного рынка.

Эта битва велась в середине 90-х годов. BSD розетки победили.

В чем различия между этими Socket API?

Существуют небольшие различия между вариантами BSD, Linux и POSIX, нет ничего более серьезного, чем любые другие различия между операционными системами Unixy.

Причина, по которой они имеют версию книги для Linux / POSIX, вероятно, больше связана с маркетингом, чем с чем-либо техническим. Он отвечает на вопрос, который издатель, вероятно, часто видел: «Зачем мне книга BSD, я использую Linux, а не BSD!» Или чаще в наши дни: «Что такое BSD?»

С точки зрения 10 000 футов Winsock очень отличается от сокетов BSD, но, поскольку это довольно строгий надмножество сокетов BSD, вы все равно можете переместить свои знания. Большинство различий - это чистые расширения для сокетов BSD, в основном связанные с различиями в архитектуре ядра Windows и в том, как обычно создаются программы для Windows. Например, первым действительно большим расширением были асинхронные сокеты, что значительно упрощает использование сокетов в однопоточной программе Windows GUI, чем использование чистых BSD-сокетов. Более поздние расширения поддерживают специальные функции, доступные в ядрах, производных от NT, которые не имеют простого аналога в системах Unixy, такие как объекты событий и перекрывающийся ввод-вывод.

Для чего бы то ни было, в некоторых системах Unixy есть расширения для старых старых сокетов BSD, например, aio_*() в Solaris и других системах.

Если ваша программа должна быть совместима с исходным кодом для многих систем, вы либо игнорируете эти различия и программируете на общую базу, общую для всех этих систем, либо создаете какой-то уровень перевода, который позволяет прозрачно использовать функции платформы. Apache, например, делает последнее, используя самые быстрые сетевые функции на каждой платформе, в то время как код основного веб-сервера не заботится о том, как это делается. Многие другие программы выбирают переносимый путь, поскольку они не являются критичными для производительности, и поэтому экономия времени программиста является более важной.

Когда люди просто говорят «Сетевое программирование на C» / «Программирование на сокете», что именно они имеют в виду?

BSD розетки или какой-то другой вариант.

Ссылки для получения дополнительной информации?

FAQ программиста Winsock . В частности, вы можете обратиться к разделу resources и статье часто задаваемых вопросов Совместимость с сокетами BSD .

(Отказ от ответственности: я сопровождающий FAQ.)

2 голосов
/ 15 января 2010

Почему для этого нет стандарта?

Есть. Вы назвали несколько. Любой может опубликовать «стандарт», не обязательно должен быть только один, и при этом не существует какой-либо контролирующей власти, способной дать «Единый истинный путь». С точки зрения сетей настоящими стандартами являются сами сетевые протоколы. Каждый должен взаимодействовать с ними, или ничего не работает вместе. То, как любая конкретная платформа реализует API для достижения этой цели, может быть разным.

В чем различия между этими Socket API?

Linux / POSIX / BSD все похожи. Windows немного отличается, но, поскольку она все еще должна поддерживать базовые протоколы, функциональность в итоге остается практически такой же. Честно говоря, я не уверен, кто использует ATL TLI больше, если они когда-либо использовали.

Какие еще API сокетов доступны?

Вероятно, их много, но вопрос в том, кто их больше использует. IBM раньше была куча, как и большинство других крупных производителей в те времена. Но я думаю, что они, по большей части, были удалены из мусорной корзины истории, так как большинство использует TCP.

Когда люди просто говорят «Сетевое программирование на С» / «Программирование на сокете», что именно они имеют в виду?

Ничего точного. Технически язык C ничего не знает о сетевом программировании. Однако многие поставщики (например, Unix, Linux, Windows и т. Д.) Предоставляют библиотеки C для выполнения сетевых операций, поэтому многие API-интерфейсы, которые вы указали выше.

2 голосов
/ 15 января 2010

API-интерфейсы сокетов Linux, BSD и Windows (по крайней мере, я не знаю об API TLI AT & T) очень похожи друг на друга. Например, Windows API изначально был основан на API BSD.

1 голос
/ 17 ноября 2010

Интерфейс TLI фактически соответствует OSI. Novell также отправляла его в свое время. Это устарело. API-интерфейсы Linux и Winsock основаны на API-интерфейсе BSD, как в случае с Linux, так и в случае с Winsock. В обоих случаях также есть небольшие различия в реализации.

...