使用线程的TCP回射服务器程序
2015-10-13 07:35
387 查看
使用线程缘由
1)fork 代价昂贵
2)fork 返回之后父子进程信息传递需要通过IPC机制
同一进程内的线程除共享全局变量外还共享:
a)进程指令
b)大多数数据
c)打开的文件描述符
d)信号处理函数和处理
e)当前工作目录
f)用户ID和组ID
不过每个线程有各自的
a)线程ID
b)寄存器集合
c)栈
d)errno
e)信号掩码
f)优先级
使用线程的tcp回射服务程序
注意的地方
编译
gcc tcp_sever_thread.c -o sever -pthread
1)fork 代价昂贵
2)fork 返回之后父子进程信息传递需要通过IPC机制
同一进程内的线程除共享全局变量外还共享:
a)进程指令
b)大多数数据
c)打开的文件描述符
d)信号处理函数和处理
e)当前工作目录
f)用户ID和组ID
不过每个线程有各自的
a)线程ID
b)寄存器集合
c)栈
d)errno
e)信号掩码
f)优先级
使用线程的tcp回射服务程序
#include <time.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <string.h> #include <unistd.h> #include <stdio.h> #include <arpa/inet.h> #include <pthread.h> #include <stdlib.h> void str_echo(int sockfd) { ssize_t n; char buf[1024]; while ( (n = read(sockfd, buf, 1024)) > 0) write(sockfd, buf, n); if (n < 0) printf("str_echo: read error"); } static void * doit(void *arg) { int connfd; connfd = *((int*)arg); free(arg); pthread_detach(pthread_self()); str_echo(connfd); close(connfd); return NULL; } int main(int argc, char** argv) { struct sockaddr_in servaddr; int sockfd, *iptr; pthread_t tid; socklen_t addrlen,len; struct sockaddr *cliaddr; if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { printf("sock error\r\n"); return 0; } bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(13000); servaddr.sin_addr.s_addr = inet_addr("0.0.0.0"); if( bind(sockfd, (struct sockaddr* )&servaddr, sizeof(servaddr)) < 0) { printf("bind error\r\n"); return 0; } if(listen(sockfd, 10) < 0) { printf("listen error\r\n"); return 0; } cliaddr = malloc(addrlen); for( ; ;) { len = addrlen; iptr = malloc(sizeof(int)); *iptr = accept(sockfd, cliaddr, &len); pthread_create(&tid,NULL, &doit, iptr); } }
注意的地方
编译
gcc tcp_sever_thread.c -o sever -pthread
相关文章推荐
- http://web1.sycsec.com/b33804a7301e583ca6a473c1c092b09f/
- Android开发菜鸟级入门5--网络编程之套接字TCP
- 《深入理解Linux网络技术内幕》阅读笔记(二十五)
- Slow HTTP Denial of Service Attack
- tcpdump抓包
- 我国高校在线慕课平台已覆盖126个国家和地区
- Android检测网络是否可用
- iOS安全系列之一:HTTPS
- eclipse HttpServlet 类会报错
- 网络红人李涛
- 虚拟机网络调试
- iOS中使用 Reachability 检测网络
- 《计算机网络 :自顶向下方法》第5章 链路层和局域网
- 网络协议
- iOS9 HTTP 不能正常使用的解决办法
- 常用的网络
- struts2 中怎样获取HttpServletReqest
- 第115讲:Hadoop集群构建硬件选择、集群规模、网络拓扑、机架感知等学习笔记
- 测通网络连接
- iOS笔记网络--get请求和post请求