一个接受多客户请求的电话

时间:2019-05-14 16:49:19

标签: c sockets unix

首先,我知道可以通过分叉或线程处理多种客户端请求的方法。但是我不明白为什么服务器不能在没有分叉或线程的情况下多次接受。 accept()调用可以简单地接受所有希望连接到它的进程。为什么除非客户端断开连接,否则call(accept())不能继续进行?

服务器以阻塞(默认)方式执行socket(),listen()和bind()

默认情况下,客户端同样会执行socket()和connect()

我认为accept的返回值将用于最近的孩子。但实际上,它会阻塞,直到先前的客户端断开连接为止。

1 个答案:

答案 0 :(得分:0)

  

我想知道是否存在由accept()覆盖返回的文件描述符?如果没有,怎么办?

没有覆盖accept() 创建一个新的连接套接字,并返回一个引用该套接字的新文件描述符-每次都创建一个新的,独立的描述符。当然,在不创建其他线程的情况下管理所有客户端连接的服务器必须存储所有这些文件描述符。 G。在一个数组中。