gpt4 book ai didi

c - 为 accept() 系统调用工作

转载 作者:行者123 更新时间:2023-11-28 20:05:04 25 4
gpt4 key购买 nike

我必须编写一个程序来检查有多少客户端可以连接到 C 中的单个服务器(套接字)。

引用了Beej的编程指南,体会到单个客户端连接到服务器后,多个客户端不能同时向同一个服务器发送消息。只有在第一个连接关闭后,才会传递来自第二个客户端的积压消息。

由于我是套接字编程的新手,所以我不确定“accept”是否是要使用的正确系统调用。此外,BACKLOG 的值应该在 listen 中,以查看服务器可以处理的压力。

有什么帮助吗?

最佳答案

accept() 是正确的系统调用。它返回与新传入连接关联的文件描述符,同时让原始套接字准备好接收更多连接。

然而,一旦您接受传入连接,通常会有主进程:

  1. 创建一个线程来处理该套接字
  2. 派生一个继承新文件描述符的新进程。
  3. 使用 select()epoll() 等轮询该套接字上的读取

如果您不这样做,接受连接上的任何后续 read() 都将被阻止,这意味着您不能再次调用 accept()

listen() 的 backlog 参数仅用于告诉内核可以允许多少套接字保持在其初始“连接”状态之前 - 通常不需要对其进行太多调整。

关于c - 为 accept() 系统调用工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8117540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com