Unix/Linux
zhsenl
这个作者很懒,什么都没留下…
展开
-
UNIX网络编程卷1 回射服务器程序 TCP服务器程序设计范式 四个版本
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 这是一个简单的回射服务器程序。它将客户发送的数据读入缓冲区并回射其中内容 下面我会介绍同一个使用 TCP 协议的回射服务器程序的几个不同版本,分别是 fork 版本、select 版本、poll 版本、多线程版本 fork 版本:为每一个客户连接派生(for原创 2014-08-25 21:25:07 · 921 阅读 · 0 评论 -
UNIX网络编程卷1 服务器程序设计范式8 预先创建线程,由主线程调用accept
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.程序启动阶段创建一个线程池之后只让主线程调用 accept 并把客户连接传递给池中某个可用线程。 //用于维护关于每个线程基于信息的 Thread 结构 typedef struct { pthread_t thread_tid; /* 线程 ID */原创 2014-08-27 11:42:06 · 1060 阅读 · 0 评论 -
UNIX网络编程卷1 服务器程序设计范式4 预先派生子进程,以线程互斥锁上锁方式保护accept
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.文件上锁文件系统操作,比较耗时 2.线程上锁,不仅适用于同一进程内各线程之间的上锁,也适用于不同进程之间的上锁。 3.在不同进程之间使用线程上锁要求: 1)互斥锁变量必须存放在由所有进程共享的内存区中 2)必须告知线程函数库这是在不同进程之间共享的互斥锁 /*原创 2014-08-26 11:50:14 · 1004 阅读 · 0 评论 -
UNIX网络编程卷1 服务器程序设计范式7 预先创建线程,以互斥锁上锁方式保护accept
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.预先创建一个线程池,并让每个线程各自调用 accept 2.用互斥锁取代让每个线程都阻塞在 accept 调用之中的做法 //用于维护关于每个线程基于信息的 Thread 结构 typedef struct { pthread_t thread_tid;原创 2014-08-26 11:54:24 · 1362 阅读 · 0 评论 -
UNIX网络编程卷1 服务器程序设计范式6 并发服务器,为每个客户请求创建一个线程
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.为每个客户请求创建一个线程,以取代为每个客户派生一个子进程 /* include serv06 */ #include "unpthread.h" int main(int argc, char **argv) { int listenfd, conn原创 2014-08-26 11:51:58 · 1231 阅读 · 0 评论 -
UNIX网络编程卷1 回射客户程序 UDP 超时设置
最初代码: #include "unp.h" int main(int argc, char **argv) { int sockfd; struct sockaddr_in servaddr; if (argc != 2) err_quit("usage: udpcli "); //1.指明服务器的 IP 地址和端口 bzero(&servaddr, s原创 2014-08-25 21:50:48 · 1189 阅读 · 0 评论 -
UNIX网络编程卷1 时间获取程序客户端 UDP 协议无关
/** * UDP,协议无关,调用 getaddrinfo 和 udp_client **/ #include "unp.h" int udp_client(const char *host, const char *serv, SA **saptr, socklen_t *lenp) { int sockfd, n; struct addrinfo hints, *res, *ressave; //1.调用 getaddrinfo //协议地址族为 AF_UNSPEC ,套接字类型为原创 2014-08-24 22:48:42 · 1162 阅读 · 0 评论 -
UNIX网络编程卷1 服务器程序设计范式5 预先派生子进程,由父进程向子进程传递套接字描述符
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.只让你进程调用 accept,然后把所接受的已连接套接字“传递”给某个子进程。 这样做就不用因为所有子进程都调用 accept 而需提供上锁保护 2.父进程必须跟踪子进程的忙闲状态,以便给空闲子进程传递新的套接字 typedef struct { pid_t原创 2014-08-26 11:51:13 · 1446 阅读 · 0 评论 -
UNIX网络编程卷1 服务器程序设计范式3 预先派生子进程,以文件上锁方式保护accept
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.允许多个进程在引用同一个监听套接字的描述符上调用 accept 这种做法并不具备兼容性。 解决的方法是让应用进程在调用 accept 前后安置某种形式的锁(lock),这样任意时刻只有一个子进程 阻塞在 accept 调用中,其他子进程则阻塞在试图获取用于保护 accept原创 2014-08-26 11:30:17 · 1005 阅读 · 0 评论 -
UNIX网络编程卷1 服务器程序设计范式0 迭代服务器
1.迭代 TCP 服务器总是在完全处理某个客户的请求后才转向下一个客户。 2.从进程控制角度看迭代服务器是最快的,因为它不执行进程控制。 /* include serv00 */ #include "unp.h" int main(int argc, char **argv) { int listenfd, connfd; void sig_int(int), web原创 2014-08-25 21:53:34 · 967 阅读 · 0 评论 -
UNIX网络编程卷1 时间获取程序服务器 UDP 协议无关
/** * UDP 协议无关 调用 getaddrinfo 和 udp_server **/ #include "unp.h" #include <time.h> int main(int argc, char **argv) { int sockfd; ssize_t n; char buff[MAXLINE]; time_t ticks; socklen_t len; struct sockaddr_storage cliaddr; //1.利用 Udp_s原创 2014-08-24 22:53:40 · 894 阅读 · 0 评论 -
UNIX网络编程卷1 时间获取程序客户端 TCP 协议相关性
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 最初代码: 这是一个简单的时间获取客户程序。客户与服务器建立一个TCP连接后,服务器以直观 可读格式简单地送回当前时间和日期 这个例子是协议相关,使用 inet_pton TCP/IPv4, IPv6 协议相关 IPv4 --> IPv6 (把代码中出现的左边的原创 2014-08-24 22:46:34 · 1707 阅读 · 0 评论 -
UNIX网络编程卷1 服务器程序设计范式1 并发服务器,为每个客户请求fork一个进程
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.传统并发服务器调用 fork 派生一个子进程来处理每个客户 2.传统并发服务器的问题在于为每个客户现场 fork 一个子进程比较耗费 CPU 时间。 /* include serv01 */ #include "unp.h" int main(int argc,原创 2014-08-25 21:55:21 · 1008 阅读 · 0 评论 -
UNIX网络编程卷1 回射客户程序 TCP客户程序设计范式
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 下面我会介绍同一个使用 TCP 协议的客户端程序的几个不同版本,分别是停等版本、select 加阻塞式 I/O 版本、 非阻塞式 I/O 版本、fork 版本、线程化版本。它们都由同一个 main 函数调用来实现同一个功能,即回射程序客户端。 它从标准输入读入一行文本,写到服务器上,读原创 2014-08-25 21:20:45 · 927 阅读 · 0 评论 -
UNIX网络编程卷1 时间获取程序服务器 TCP 协议相关性
最初代码: 这是一个简单的时间获取服务器程序。它和时间获取程序客户端一道工作。 TCP/IPv4, IPv6 协议相关 IPv4 --> IPv6 (把代码中出现的左边的字符串换为右边的,就变成了IPv6版本的) sockaddr_in --> sockaddr_in6 AF_INET --> AF_INET6 sin_family --> sin6_family sin_port --> sin6_port sin_addr --> sin6_addr #include "unp.h"原创 2014-08-24 22:53:03 · 1045 阅读 · 0 评论 -
UNIX网络编程卷1 服务器程序设计范式2 预先派生子进程,每个子进程调用accept
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.预先派生子进程:在启动阶段预先派生一定数量的子进程,当各个客户连接到达时, 这些子进程立即就能为它们服务。 2.优点是无须引入你进程执行 fork 的开销就能处理新到的客户。 缺点是父进程必须在服务器启动阶段猜测需要预先派生多少子进程。 3.父进程可以持续监视闲置子进程原创 2014-08-25 21:56:06 · 910 阅读 · 0 评论