迭代服务器的问题是:在客户请求会发费较长时间时,整个服务器被一个客户长期占用。
并发服务器:最简单的方法是fork一个子进程来服务每一个客户。
当一个连接建立后,accept函数返回,服务器接着调用fork,然后由子进程通过已连接套接字描述符connfd服务客户,父进程关闭已连接套接字描述符connfd,并且父进程通过监听套接字listenfd来等待新的连接。
父进程fork创建子进程后,父进程的listenfd和connfd和子进程中共享(拷贝),所以父进程关闭connfd,子进程关闭listenfd,各司其职。子进程处理完客户连接后也会关闭connfd,父进程可以通过listenfd调用accept函数来处理下一个客户连接。
最终的连接状态如图: