您的位置:首页 > 理论基础 > 计算机网络

TCP并发服务器(五)——每个客户一个线程

2014-07-24 21:59 381 查看
TCP并发服务器(五)——每个客户一个线程

1.说明

前面4个版本都是关于进程的,可以将进程改为线程来实现。

这个最简单的版本也快于前面的所有预先派生进程的版本。

2.代码

#include "unpthread.h"

void sig_int(int signo)
{
DPRINTF("sig_int()\n");
void pr_cpu_time(void);
pr_cpu_time();
exit(0);
}

void *doit(void *arg)
{
void web_child(int);
DPRINTF("创建一个线程\n");
Pthread_detach(pthread_self());

//int connfd = (int)arg;
web_child((int)arg);
Close((int)arg);

return NULL;
}

int main(int argc, char *argv[])
{
socklen_t addrlen;
int listenfd;
if (argc == 2) {
listenfd = Tcp_listen(NULL, argv[1], &addrlen);
} else if (argc == 3) {
listenfd = Tcp_listen(argv[1], argv[2], &addrlen);
} else {
err_sys("Usage: a.out [ <host> ] <port#>");
}
struct sockaddr *cliaddr = (struct sockaddr*)Malloc(addrlen);

Signal(SIGINT, sig_int);

pthread_t tid;
for (;;) {
socklen_t clilen = addrlen;
DPRINTF("Wait for a connection\n");
int connfd = Accept(listenfd, cliaddr, &clilen);
DPRINTF("Accept a connection\n");

Pthread_create(&tid, NULL, &doit, (void*)connfd);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐