c++ - 处理客户端连接的最有效方式(套接字编程)

标签 c++ c linux sockets unix

对于我在 Internet 上看到的 Linux/Unix 套接字教程的每一个教程和示例,服务器端代码总是涉及一个无限循环,每次都检查客户端连接。 示例:

http://www.thegeekstuff.com/2011/12/c-socket-programming/

http://tldp.org/LDP/LG/issue74/tougher.html#3.2

是否有更有效的方法来构建服务器端代码,使其不涉及无限循环,或者以占用更少系统资源的方式对无限循环进行编码?

最佳答案

这些例子中的无限循环已经很有效了。对 accept() 的调用是一个阻塞调用:该函数不会返回,直到有客户端连接到服务器。调用 accept() 函数的线程的代码执行被停止,并且不占用任何处理能力。

accept() 视为对 join() 的调用,或者类似于对互斥锁/锁/信号量的等待。

当然,还有许多其他方法可以处理传入连接,但那些其他方法处理 accept() 的阻塞性质。此功能很难取消,因此存在非阻塞替代方案,允许服务器在等待传入连接时执行其他操作。一种替代方法是使用 select()。其他替代方案的可移植性较差,因为它们涉及低级操作系统调用以通过回调函数、事件或操作系统处理的任何其他异步机制发出连接信号...

关于c++ - 处理客户端连接的最有效方式(套接字编程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11687215/

相关文章:

linux - 如何使用 MobaXTerm 便携版查找空目录

linux - DMA 通过 PCIe 到其他设备

C++ CRTP 和从基访问派生的嵌套类型定义

c++ - 计数器变量 : how does it work?

c - * C 中的 Vs++ 优先级

c - 为什么我的程序中总是出现 "undefined reference to"错误?

c++ - 使用 va_list 和 printf 传递参数时的精度损失

c++ - realloc 函数不会为我保留现有内存

c - 将 char 缓冲区传递给函数

python - 更改特定 python 安装的 python 路径