随笔分类 - 网络开发
主要写点关于网络socket,ftp等等心得,转载一些技术文章。
摘要:#include #include #include #include #include #include #include #include /* 设置计数,只允许echo_write_cb调用一次 */static int count = 1;/*当有数据可读的时候,会调用这个函数 */static void echo_read_cb(struct bufferevent *bev, void *ctx){ printf("Echo_read_cb is called\n"); struct evbuffer *input = bufferevent_get_input
阅读全文
摘要:4 锁和线程编写多线程程序的时候,在多个线程中同时访问同样的数据并不总是安全的。libevent的结构体在多线程下通常有三种工作方式:² 某些结构体内在地是单线程的:同时在多个线程中使用它们总是不安全的。² 某些结构体具有可选的锁:可以告知libevent是否需要在多个线程中使用每个对象。² 某些结构体总是锁定的:如果libevent在支持锁的配置下运行,在多个线程中使用它们总是安全的。为获取锁,在调用分配需要在多个线程间共享的结构体的libevent函数之前,必须告知libevent使用哪个锁函数。如果使用pthreads库,或者使用Windows本地线程代码,
阅读全文
摘要:Nick Mathewson 著晨星 翻译老衣 整理libevent有一些被整个进程共享的、影响整个库的全局设置。必须在调用libevent库的任何其他部分之前修改这些设置,否则,libevent会进入不一致的状态。1 Libevent中的日志消息libevent可以记录内部错误和警告。如果编译进日志支持,还会记录调试信息。默认配置下这些信息被写到stderr。通过提供定制的日志函数可以覆盖默认行为。接口示例[cpp] view plaincopy#include#includestaticvoiddiscard_cb(intseverity,constchar*msg){/*Thiscall
阅读全文
摘要:Libevent参考手册:前言Nick Mathewson 著晨星 翻译老衣 整理1 从一万英尺外看LibeventLibevent是用于编写高速可移植非阻塞IO应用的库,其设计目标是:v 可移植性:使用libevent编写的程序应该可以在libevent支持的所有平台上工作。即使没有好的方式进行非阻塞IO,libevent也应该支持一般的方式,让程序可以在受限的环境中运行。v 速度:libevent尝试使用每个平台上最高速的非阻塞IO实现,并且不引入太多的额外开销。v 可扩展性:libevent被设计为程序即使需要上万个活动套接字的时候也可以良好工作。v 方便:无论何时,最自然的使用libe
阅读全文
摘要:(一)配置第一步----dns配置:安装好Ubuntu之后设置了静态IP地址,再重启后就无法解析域名。想重新设置一下DNS,打开/etc/resolv.confcat /etc/resolv.conf# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN内容是一段警告:说这个文件是resolvconf程序动态创建的,不要直接手动编辑,修改将被覆盖。果不其然,修改
阅读全文
摘要:epoll是Linux内核为处理大批量句柄而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。一、epoll的优点支持一个进程打开大数目的socket描述符。IO效率不随FD数目增加而线性下降。内核微调。二、epoll的使用epoll有2种工作方式:LT和ET。 LT(leveltriggered,水平触发)是缺省的工作方式,并且同时支持block和no-blocksocket.在这种做法中,内核告诉你一个文件描述符是否就绪了,然后你可以对这个就绪的fd进行IO操作。如果你不作任何操作,.
阅读全文
摘要:功能描述: 获取或者设置与某个套接字关联的选 项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位于的层和选项的名称必须给出。为了操作套接字层的选项,应该 将层的值指定为SOL_SOCKET。为了操作其它层的选项,控制选项的合适协议号必须给出。例如,为了表示一个选项由TCP协议解析,层应该设定为协议 号TCP。用法:#include #include intgetsockopt(int sock, int level, int optname, void *optval, socklen_t *optlen);intsetsockopt(int sock,
阅读全文
摘要:/* server.c */#include #include #include #include "error.h"#define MAXLINE 80#define SERV_PORT 8000int main(void){struct sockaddr_in servaddr, cliaddr;socklen_t cliaddr_len;int sockfd;char buf[MAXLINE];char str[INET_ADDRSTRLEN];int i, n;//socket IPv4 SOCK_DGRAMsockfd = Socket(AF_INET, SOCK
阅读全文
摘要:/* client.c */#include #include #include #include #include "error.h"#define MAXLINE 80#define SERV_PORT 8000int main(int argc, char *argv[]){struct sockaddr_in servaddr;int sockfd, n;char buf[MAXLINE];char str[INET_ADDRSTRLEN];socklen_t servaddr_len;//socketsockfd = Socket(AF_INET, SOCK_DG
阅读全文
摘要:1. 点分十进制IP地址与二进制IP地址转换:inet_addr()函数将点分十进制的字符串转换为32位的网络字节顺序的IP信息。inet_network()函数将点分十进制的字符串转换为32位的主机字节顺序的IP信息。inet_ntoa()函数将32位的网络字节顺序的IP信息转换成点分十进制的字符串方式。inet_aton()函数将点分十进制的字符串方式IP信息转换成32位的网络字节顺序。2. 通过IP地址获取网络ID和主机ID:inet_lnaof()函数从某个IP地址中提取标准的主机ID。inet_netof()函数从某个IP地址中提取标准的网络ID。inet_makeaddr()函数将
阅读全文
摘要:#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define MAXBUF 1024#define MAXEPOLLSIZE 10000/*setnonblocking - 设置句柄为非阻塞方式*/int setnonblocking(int sockfd){ if (fcntl(sockfd, F_SETFL, fcntl(sockfd, F_GETFD
阅读全文
摘要:1. Epoll是何方神圣?Epoll可是当前在Linux下开发大规模并发网络程序的热门人选,Epoll在Linux2.6内核中正式引入,和select相似,其实都I/O多路复用技术而已,并没有什么神秘的。其实在Linux下设计并发网络程序,向来不缺少方法,比如典型的Apache模型(Process Per Connection,简称PPC),TPC(Thread PerConnection)模型,以及select模型和poll模型,那为何还要再引入Epoll这个东东呢?那还是有得说说的…2.常用模型的缺点如果不摆出来其他模型的缺点,怎么能对比出Epoll的优点呢。2.1 PPC/TPC模型这
阅读全文