Какие есть альтернативы сокетам программирования tcp на c ++ linux

0

Можно ли запрограммировать сетевые клиенты и серверы, используя только системные функции, открывать, читать и писать на linux c++? Какие альтернативы низкого уровня имеют гнезда?

Спасибо вам всем.

Теги:
networking

1 ответ

1
Лучший ответ

Вам нужно больше трех.

Вы должны использовать socket, bind, listen, connect, accept и обычно также использовать select, poll или платформу/более высокую производительность современных epoll (Linux) и kqueue (BSD)

В зависимости от типа гнезда вы можете быть в порядке с read и write, но вам может потребоваться sendto, recvfrom

Единственный способ, которым вы могли бы использовать "только чтение и запись", состоял бы в том, чтобы суперсервер inetd открыл для вас сетевые порты и сопоставил порт с STDIN и STDOUT. Посмотрите на inetd, если это ваша цель. Если вы идете по этому маршруту, вам даже не нужно read и write вы можете буквально использовать printf. Программа под Inetd даже не должна знать, что это сетевая программа.

Почему бы не попробовать библиотеку высокого уровня?

Проверьте Boost.Asio

http://www.boost.org/doc/libs/1_38_0/doc/html/boost_asio.html

  • 0
    Хороший ответ, хотя вместо того, чтобы предлагать «выбирать» и «опросить», было бы лучше предложить «epoll», особенно для серверов, которые должны масштабироваться до большого количества открытых соединений.
  • 0
    Спасибо @MichaelAaronSafyan - Это приятно знать. Я немного устарел, и мои знания в основном кроссплатформенные. В последние несколько лет я не написал ни одного значимого сетевого кода, и никогда специально для Linux. Я добавлю ваше предложение, хотя!
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню