服务器源码-鸿鹄论坛_华为认证h35-211-hcnp-access network题库
18.5服务器设计现在我们开始描述一下服务器。有两个因素影响服务器的设计。拨号过程可能会延续一段时间(15~30秒),所以服务器一定要创建一个子进程来处理实际的拨号。服务器的精灵进程(父进程)一定要管理所有的加锁。服务器的工作过程如下:
父进程在服务器的众所周知名字处接收从客户机发来的请求。这在客户机-服务器之间生成了一个流管道。父进程就像open服务器一样,要同时处理多个客户机。基于客户机要联系的远程系统的名字,父进程查询Systems文件和Devices文件找到匹配的项。父进程同时也维护一个加锁表,记录哪些设备在被使用,这样它就不查询那些被使用的项了。如果发现匹配项,则fork一个出子进程来进行实际的拨号。父进程这时可以处理其他客户机请求。如果成功,子进程就在客户机指定的流管道上将调制解调器的文件描述符传给客户机,并调用exit(0)。如果发生了错误(例如,电话线占线、没有响应等),子进程调用exit(1)。
子进程结束时,会发送信号SIGCHLD通知父进程。父进程就得到子进程的结束状态。如果子进程成功,父进程就不用再做其他事情。在客户机结束使用调制解调器之前,必须一直对调制解调器加锁。客户机指定的客户机-父进程之间的流管道就一直打开着。当客户机终止时,父进程得到通知,然后释放对设备的加锁。如果子进程不成功,父进程就从Systems文件中尝试找下一个匹配项。如果找到了对远程系统的另一项,父进程返回上一步,创建一个新的子进程来拨号。如果没有找到新的匹配项,父进程调用send_err后关闭与客户机的流管道。与每一个客户机有一个连接使子进程在必要时能将调试输出发回给客户机。发生问题时,客户机常常想要看到整个实际拨号过程。
阅读更多关于父进程和子进程的内容,请点击以下链接:
18.6服务器源码服务器包括17个源文件。父进程和子进程所使用的文件以及这些文件的详细说明如表18-4所示。父进程负责接受客户机请求、管理加锁表以及fork子进程处理拨号操作。子进程负责实际的拨号任务,并将结果返回给父进程或客户机。
在这里,您可以找到相关的服务器源码实例: