Chinaunix首页 | 论坛 | 博客
  • 博客访问: 312359
  • 博文数量: 11
  • 博客积分: 4329
  • 博客等级: 上校
  • 技术积分: 95
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-01 12:03
文章分类

全部博文(11)

文章存档

2016年(4)

2015年(7)

分类: C/C++

2015-11-09 10:21:16

The GNU library provides a convenient way to retry a call after a temporary failure, with the macro TEMP_FAILURE_RETRY: — Macro: TEMP_FAILURE_RETRY (expression) This macro evaluates expression once, and examines its value as type long int. If the value equals -1, that indicates a failure and errno should be set to show what kind of failure. If it fails and reports error code EINTR, TEMP_FAILURE_RETRY evaluates it again, and over and over until the result is not a temporary failure. The value returned by TEMP_FAILURE_RETRY is whatever value expression produced. 

举个例子(etc.)TEMP_FAILURE_RETRY(::accept(sock, (struct sockaddr*)addr, &len)); 
它的功能: 不断地从套接口中接收客户端的地址知道成功为止返回客户端的可用套接口. 

顺便写一个利用epoll技术来接收数据的routine 
int accept(struct sockaddr_in *addr) 

socklen_t len = sizeof(struct sockaddr_in); 
bzero(addr, sizeof(struct sockaddr_in)); 
struct epoll_event ev; 
int rc = epoll_wait(kdpfd, &ev, 1, 2000);//这里kdpfd is the library function epoll_create( 
           int size)的reture value.Here is called by epoll_create(1).You can man it.
if(1 == rc && (ev.events & EPOLLIN)) 
   return TEMP_FAILURE_RETRY(::accept(sock, (struct sockaddr*)addr, &len)); 
return -1; 
}
阅读(5917) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:C++标准typeof关键字应用

给主人留下些什么吧!~~