zoukankan      html  css  js  c++  java
  • UNIX网络编程卷1 server编程范式0 迭代server

    本文senlie原版的。转载请保留此地址:http://blog.csdn.net/zhengsenlie


    1.迭代 TCP server总是在全然处理某个客户的请求后才转向下一个客户。

    2.从进程控制角度看迭代server是最快的,由于它不运行进程控制。

    /* include serv00 */
    #include	"unp.h"
    
    
    int
    main(int argc, char **argv)
    {
    	int					listenfd, connfd;
    	void				sig_int(int), web_child(int);
    	socklen_t			clilen, addrlen;
    	struct sockaddr		*cliaddr;
    
    
    	//1.利用 Tcp_listen 创建 TCP 套接字 --> 协议无关。IPv4 和 IPv6 都适用 
    	if (argc == 2)
    		listenfd = Tcp_listen(NULL, argv[1], &addrlen);
    	else if (argc == 3)
    		listenfd = Tcp_listen(argv[1], argv[2], &addrlen);
    	else
    		err_quit("usage: serv00 [ <host> ] <port#>");
    	cliaddr = Malloc(addrlen);
    
    
    	//2.设置键入中断键产生的 SIGINT 信号的捕获函数
    	Signal(SIGINT, sig_int);
    
    
    	//3.接受客户连接
    	for ( ; ; ) {
    		clilen = addrlen;
    		//server进程在 accept 调用中被挂起。
    		//等待某个客户连接的到达,完毕三次握手才返回
    		//cliaddr 保存着发起连接的客户的IP地址和端口。clilen是 cliadr 的大小
    		connfd = Accept(listenfd, cliaddr, &clilen);
    
    
    		//处理客户请求
    		web_child(connfd);		/* process the request */
    
    
    		//关闭已连接套接字
    		Close(connfd);			/* parent closes connected socket */
    	}
    }
    /* end serv00 */
    
    
    /* include sigint */
    // SIGINT 处理器
    void
    sig_int(int signo)
    {
    	void	pr_cpu_time(void);
    
    
    	//正常运行时间统计
    	pr_cpu_time();
    	exit(0);
    }
    /* end sigint */


  • 相关阅读:
    3513: [MUTC2013]idiots
    ELK+Filebeat+Kafka+ZooKeeper 构建海量日志分析平台(elk5.2+filebeat2.11)
    【python全栈开发】初识python
    SQL疑难问题
    费用分摊问题
    透过现象看本质
    关于python3round与float的四省五入精度的问题
    Win10下VSCode安装PlantUML
    安装pymssql
    ensorFlow的安装
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5046231.html
Copyright © 2011-2022 走看看