Как я могу принять несколько клиентов на TCP-сервер?

в настоящее время у меня установлен TCP-сервер, который может принимать соединение от клиента и эхо-сигналы от клиента. Как я могу заставить несколько клиентов подключиться к серверу и отправить их ввод всем клиентам?

Кажется, я должен раскошелиться, но я не совсем уверен, как...

на сервере я должен разместить бесконечный цикл, начиная с accept (или listen?), что будет вилка, когда есть новое подключение? Затем дочерний процесс, я бы закройте сокет из предыдущего процесса и подключитесь к новому, но я снова не совсем уверен.

как будет выглядеть псевдо-код в отношении только манипуляции вилками и сокетами? Моя догадка:

while(1) //before connection or accept?

pid = fork()

if(pid==0)
  // open socket from client
  // run the rest of the code 
  // end process when client disconnects
else
  // close socket from client

2 ответов


вы можете найти в интернете много примеров, сначала я нашел: http://www.tutorialspoint.com/unix_sockets/socket_server_example.htm

имейте в виду, что процесс (или поток) на клиентский подход не масштабируется хорошо. Современные серверы используют неблокирующий основной цикл диспетчеризации. Взгляните на libevent.

вот пример использования echo server libevent: https://github.com/jasonish/libevent-examples/tree/master/echo-server


получается псевдо-код выглядит так:

while(1)     //before listen

pid = fork;  //right after accept

if(fork>0)
  close sd2 ( sd2 = accept(....) )
  continue
else
  run the rest of the program