leo*_*rex 6 c c++ unix sockets linux
对于我在互联网上看到的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().其他替代方案的可移植性较差,因为它们涉及低级操作系统调用,通过回调函数,事件或操作系统处理的任何其他异步机制来发出连接信号......
| 归档时间: |
|
| 查看次数: |
4169 次 |
| 最近记录: |