网络编程
Phoenix_FuliMa
这个作者很懒,什么都没留下…
展开
-
Socket编程中select函数的用法详解
select() 在 SOCKET 编程中还是比较重要的,可是对于初学 SOCKET 的人来说都不太爱用 select() 写程序,他们只是习惯写诸如 conncet()、accept()、recv() 或 recvfrom() 这样的阻塞程序(所谓阻塞方式 block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使转载 2012-06-18 14:58:19 · 1655 阅读 · 1 评论 -
Socket函数
accept(接受socket连线) 相关函数 socket,bind,listen,connect 表头文件 #include #include 定义函数 int accept(int s,struct sockaddr * addr,int * addrlen); 函数说明 acc转载 2012-02-04 10:52:14 · 2334 阅读 · 0 评论 -
水平触发和边缘触发的区别
水平触发(level-triggered,也被称为条件触发)LT: 只要满足条件,就触发一个事件(只要有数据没有被获取,内核就不断通知你) 边缘触发(edge-triggered)ET: 每当状态变化时,触发一个事件 “举个读socket的例子,假定经过长时间的沉默后,现在来了100个字节,这时无论边缘触发和条件触发都会产生一个read ready notification通知应用程原创 2012-10-19 17:06:59 · 9899 阅读 · 1 评论 -
ERROR:Connection reset by peer
抛出的异常也有可能是客户端中断连接。 当客户端中断连接的时候服务器也会抛出这个异常出来。 就是说客户端正在连接的时候 突然终止 了连接,这样,服务器端会抛出Connection reset by peer 异常出来原创 2012-10-16 09:19:02 · 1088 阅读 · 0 评论 -
高性能IO设计的Reactor和Proactor模式
在高性能的I/O设计中,有两个比较著名的模式Reactor和Proactor模式,其中Reactor模式用于同步I/O,而Proactor运用于异步I/O操作。 在比较这两个模式之前,我们首先的搞明白几个概念,什么是阻塞和非阻塞,什么是同步和异步,同步和异步是针对应用程序和内核的交互而言的,同步指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪,而异步是指转载 2012-08-01 13:49:52 · 967 阅读 · 0 评论 -
封装read和write函数
int readn(int fd, void *vptr, int n) { int nleft; int nread; char *ptr; ptr = (char*)vptr; nleft = n; while(nleft > 0) { nread = read(fd, ptr, nleft); if(nread < 0) { if(errno == EIN原创 2012-08-16 08:29:34 · 1232 阅读 · 0 评论 -
使用select为recvfrom设置超时
int readable_timeo(int fd, int sec) { fd_set rset; struct timeval tv; FD_ZERO(&rset); FD_SET(fd, &rset); tv.tv_sec = sec; tv.tv_usec = 0; return (select(fd+1, &rset, NULL, NULL, &tv)); }原创 2012-08-16 07:48:40 · 3972 阅读 · 0 评论 -
Linux中的EAGAIN含义
在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一个错误(比如用在非阻塞操作中)。 从字面上来看,是提示再试一次。这个错误经常出现在当应用程序进行一些非阻塞(non-blocking)操作(对文件或socket)的时候。例如,以 O_NONBLOCK的标志打开文件/socket/FIFO,如果你连续做read操作而没有数据可读。此时程序不会转载 2012-08-13 14:14:58 · 1947 阅读 · 0 评论 -
epoll用法
// // a simple echo server using epoll in linux // // 2009-11-05 // by sparkling // #include #include #include #include #include #include #include #include #include using namespace std; #d转载 2012-04-20 23:27:15 · 590 阅读 · 0 评论 -
Proactor和Reactor模式_继续并发系统设计的扫盲
Proactor和Reactor都是并发编程中的设计模式。在我看来,他们都是用于派发/分离IO操作事件的。这里所谓的 IO事件也就是诸如read/write的IO操作。"派发/分离"就是将单独的IO事件通知到上层模块。两个模式不同的地方 在于,Proactor用于异步IO,而Reactor用于同步IO。 摘抄一些关键的东西: " Two patterns that involve转载 2012-08-01 14:49:27 · 1103 阅读 · 0 评论 -
设置套接字的非阻塞模式
当使用socket()函数和WSASocket()函数创建套接字时,默认都是阻塞的。在创建套接字之后,通过调用ioctlsocket()函数,将该套接字设置为非阻塞模式。函数的第一个参数是套接字,第二个参数设置为FIONBIO,第三个参数设置为unsigned long类型的非零值。下面代码清单演示了如何用ioctlsocket()函数,设置套接字为非阻塞模式。 SOCKET转载 2012-06-20 13:09:58 · 10379 阅读 · 1 评论 -
epoll实例—1
#include #include #include #include #include #include #include #include #include using namespace std; #define MAXLINE 5 #define OPEN_MAX 100 #define LISTENQ 20 #define SERV_PORT 9527 #define转载 2012-12-05 16:53:54 · 873 阅读 · 0 评论