当前位置: 首页 >> 程序设计 >> 并发服务器模型实例
 

并发服务器模型实例

作者:      来源:zz     发表时间:2007-07-23     浏览次数:      字号:    

#include "unp.h"

#define LISTENPORT 8888
#define BACKLOG    1024

int main(void)
{
    int listenfd, connfd;
    struct sockaddr_in servaddr;
    pid_t childpid;
    
    if ((listenfd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1)
        err_sys("socket");
    bzero(&servaddr, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(LISTENPORT);
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    if (bind(listenfd, (SA *)&servaddr, sizeof(servaddr)) == -1)
        err_sys("bind");
    else if (listen(listenfd, BACKLOG) == -1)
        err_sys("listen");
   
    for (;;) {
        if ((connfd = accept(listenfd, NULL, NULL)) == -1)   
            err_sys("accept");
        if ((childpid = fork()) == -1)
            err_sys("fork");
        else if (childpid == 0) {    /* child process handle client request */
            if (close(listenfd) == -1)
                err_sys("close");
       
            proclient(connfd);

            if (close(connfd) == -1)
                err_sys("close");
            exit(0);
        } else if (childpid > 0) {    /* parent process */
            if (close(connfd) == -1)
                err_sys("close");
        }
    }
   
    exit(0);
}

责任编辑 webmaster

 
 
 
 
 
评论更多>>
 
 
 
发表
 
姓名: QQ:
性别: MSN:
E-mail: 主页:
评分: 1 2 3 4 5
评论内容:
验证码:
  
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  •