UNIX网络编程学习指南--epoll函数】的更多相关文章

epoll是select/poll的强化版,都是多路复用的函数,epoll有了很大的改进. epoll的功能 1.支持监听大数目的socket描述符 一个进程内,select能打开的fd是有限制的,有宏FD_SETSIZE设置,默认值是1024.z在某些时候,这个数值是远远不够用的.解决方法有两种,已是修改宏然后再重新编译内核,但与此同时会引起网络效率的下降;二是使用多进程来解决,但是创建多个进程是有代价的,而且进程间数据同步没有多线程间方便.而epoll没有这个限制,它所支持的最大FD上限远远…
unix网络编程str_cli使用epoll实现 unix环境高级编程中也有这个函数,都是为了讲解IO多路转接.从本质上来看epoll就是一个改善了的select和poll,本质没发生任何变化,对于构建在poll,select和epoll上的框架使用者来说,没什么区别.而对框架设计者来说,使用epoll来替换select或者poll代价也不大. epoll说明 epoll主要涉及到三个函数,这个要比select和poll复杂,从本质上来说是因为epoll把通知内核我想要观察的描述符和内核通知我哪…
UNIX网络编程--getsockname和getpeername函数   来源:网络转载   http://www.educity.cn/linux/1241293.html     这两个函数或者返回与某个套接字关联的本地协议地址(getsockname),或者返回与某个套接字关联的外地协议地址即得到对方的地址(getpeername). #include <sys/socket.h> int getsockname(int sockfd,struct sockaddr* localadd…
上一篇我们提到,除非套接字已连接,否则异步错误是不会返回到UDP套接字的.我们确实可以给UDP套接字调用connect,然而这样做的结果却与TCP连接大相径庭:没有三次握手.内核只是检查是否存在立即可知的错误(例如一个显然不可达的目的地),记录对端的IP地址和端口号(取自传递给connect的套接字地址结构),然后立即返回到调用进程. 有了这个能力后,我们必须区分: (1)未连接UDP套接字,新创建UDP套接字默认如此: (2)已连接UDP套接字,对UDP套接字调用connect的结果. 对于已…
#include <sys/socket.h> ssize_t recv(int sockfd, void *buff, size_t nbytes, int flags); ssize_t send(int sockfd, const void *buff, size_t nbytes, int flags); send和recv的前3个参数等同于read和write: flags参数值为0或为下图列出的一个或多个常值的逻辑或. flags 说明 recv send MSG_DONTROUT…
#include "unp.h" int main(int argc , char**argv) { int sockfd , n; //sockfd套接字描述符 ]; struct sockaddr_in servaddr; /*sockaddr_in={ * short sin_family; 地址族 * unsigned short sin_port; 端口号,必须采用网络数据格式,可用htons()函数将数字转换为网络数据格式 * struct in_addr sin_addr…
前言 后端开发的应该都知道Nginx服务器,Nginx是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器.后端部署中一般使用的就是Nginx反向代理技术. Nginx 相较于 Apache 具有占有内存少,稳定性高等优势,并发能力强的优点.它所使用的网络通信模型就是epoll. *注:epoll模型编程实例需要先了解红黑树.tcp/ip.socket.文件描述符fd.阻塞.回调等概念. epoll介绍 一.epoll模型概念 传统的并发服务器Apach…
listen函数使用主动连接套接口变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程.在TCP服务器编程中listen函数把进程变为一个服务器,并指定相应的套接字变为被动连接. listen函数在一般在调用bind之后-调用accept之前调用,它的函数原型是: -------------------------------------------------------------------------------- #include<sys/socket.h>…
假设server和client 已经建立了连接,server调用了close, 发送FIN 段给client(其实不一定会发送FIN段,后面再说),此时server不能再通过socket发送和接收数据,此时client调用read,如果接收到FIN 段会返回0,但client此时还是可以write 给server的,write调用只负责把数据交给TCP发送缓冲区就可以成功返回了,所以不会出错,而server收到数据后应答一个RST段,表示服务器已经不能接收数据,连接重置,client收到RST段…
前言 当把套接口地址结构传递给套接口函数时,总是通过指针来传递的,即传递的是一个指向结构的指针.结构的长度也作为参数来传递,其传递的方式取决于结构的传递方向:从进程到内核,还是从内核到进程. 1.从进程到内核 从进程到内核传递套接口地址结构的函数有3个:bind.connect和sendto,这3个函数的一个参数是指向套接口地址结构的指针,另一个参数是结构的整数大小,例如: /* example */ struct sockaddr_in serv; /* fill in serv{} */ c…