使用kqueue的str_cli函数】的更多相关文章

void str_cli(FILE *fp, int sockfd) { , isfile; char buf[MAXLINE]; ]; struct timespec ts; struct stat st; isfile = ((fstat(fileno(fp), &st) == ) && (st.st_mode & S_IFMT) == S_IFREG); EV_SET(&kev[], fileno(fp), EVFILT_READ, EV_ADD, , , N…
str_cli函数完成客户处理循环: 从标准输入读入一行文本,写到服务器上,读回服务器对该行的回射,并把回射行写到标准输出上 读入一行,写到服务器 fgets读入一行文本,writen把该行发送给服务器 从服务器读入回射行,写到标准输出 readline从服务器读入回射行,fputs把它写到标准输出 返回main函数 当遇到文件结束符或错误时,fgets将返回一个空指针,于是客户处理循环终止 我们的Fgets函数检查是否发生错误,若发生则中止进程,因此Fgets只是在遇到文件结束符时才返回一个空…
我们可以使用select函数重写http://www.cnblogs.com/nufangrensheng/p/3587962.html中的str_cli函数,这样服务器进程一终止,客户就能马上得到通知.早先那个版本的问题在于:当套接口上发生某些事件时,客户可能阻塞于fgets调用.新版本改为阻塞于select调用,等待要么标准输入可读,要么套接口可读.下图展示了调用select所处理的各种条件. 客户的套接口上的三个条件处理如下: (i)如果对端TCP发送数据,那么该套接口变为可读,并且rea…
void str_cli(FILE *fp, int sockfd) { pid_t pid; char sendline[MAXLINE], recvline[MAXLINE]; ) { /* child: server -> stdout */ ) fputs(recvline, stdout); kill(getppid(), SIGTERM); /* in case parent still running */ exit(); } /* parent: stdin -> server…
void str_cli(FILE *fp, int sockfd) { int maxfdp1, val, stdineof; ssize_t n, nwritten; fd_set rset, wset; char to[MAXLINE], fr[MAXLINE]; char *toiptr, *tooptr, *friptr, *froptr; val = fcntl(sockfd, F_GETFL, ); fcntl(sockfd, F_SETFL, val | O_NONBLOCK);…
void str_cli(FILE *fp, int sockfd) { int stdineof; char buf[MAXLINE]; int n; int wfd; ]; struct dvpoll dopoll; int i; int result; wfd = open(); pollfd[].fd = fileno(fp); pollfd[].events = POLLIN; pollfd[].revents = ; pollfd[].fd = sockfd; pollfd[].ev…
void str_cli(FILE *fp, int sockfd) { int maxfdp1, stdineof; fd_set rset; char buf[MAXLINE]; int n; stdineof = ; FD_ZERO(&rset); for ( ; ; ) { ) { FD_SET(fileno(fp), &rset); } FD_SET(sockfd, &rset); maxfdp1 = max(fileno(fp), sockfd) + ; select(…
void str_cli(FILE *fp, int sockfd) { int maxfdp1; fd_set rset; char sendline[MAXLINE], recvline[MAXLINE]; FD_SET(&rset); for ( ; ; ) { FD_SET(&fileno(fp), &rset); FD_SET(sockfd, &rset); maxfdp1 = max(fileno(fp), sockfd) + ; select(maxfdp1,…
创建套接字,装填网际网套接字地址结构 创建一个TCP套接字,用服务器的IP地址和端口号装填一个网际网套接字地址结构 我们可从命令行参数取得服务器的IP地址 从头文件unp.h取得服务器的众所周知端口号(SERV_PORT) 连接到服务器 connect建立与服务器的连接 str_cli函数完成剩余部分的客户处理工作 #include "unp.h" int main(int argc, char **argv) { int sockfd; struct sockaddr_in serv…
本博文主要针对UNP一书中的第六章内容来聊聊I/O复用技术以及其在网络编程中的实现 1. I/O复用技术 I/O多路复用是指内核一旦发现进程指定的一个或者多个I/O条件准备就绪,它就通知该进程.I/O复用适用于以下场合: (1) 当客户处理多个描述符(一般是交互式输入或网络套接字),必须适用I/O复用 (2) 当一个客户处理多个套接字时,这种情况很少见,但也可能出现 (3) 当一个TCP服务器既要处理监听套接字,又要处理已连接套接字,一般就要使用I/O复用 (4) 如果一个服务器既要适用TCP,…