Можно ли запрограммировать сетевые клиенты и серверы, используя только системные функции, открывать, читать и писать на linux c++? Какие альтернативы низкого уровня имеют гнезда?
Спасибо вам всем.
Вам нужно больше трех.
Вы должны использовать 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