之前在代码开源(3)——UNIX中CS简单实现 给出的代码,存在一个问题,那就是只支持单个连接。本文整理给出了三种方法:多进程、IO多路复用、多线程,主要参考《深入理解计算机系统》一书。对源码做了修改整理,加了些批注。下面一一给出,只修改服务器端的主程序,客户端代码不变。其中用到的rio在代码开源(2)——UNIX 健壮I/O函数 已给出。
首先给出原先的版本,即不支持多个连接。为了突出重点,做了些简化,比如去掉了一些异常的判断(accept调用失败,select调用失败等),实际编写中应该加上这些判断。
#include "server.h"
int main(int argc, char **argv)
{
int listenfd, connfd;
unsigned int clientlen; //地址长度
struct sockaddr_in clientaddr; //客户端地址
if(argc != 2) //参数必须是2个
{
fprintf(stderr, "usage: %s <port>\n",argv[0]);
r