Chinaunix首页 | 论坛 | 博客
  • 博客访问: 441061
  • 博文数量: 55
  • 博客积分: 2235
  • 博客等级: 大尉
  • 技术积分: 625
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-14 13:34
文章分类
文章存档

2012年(2)

2011年(26)

2010年(1)

2009年(20)

2008年(6)

我的朋友

分类: LINUX

2008-07-21 18:08:04

    如果不想在系统调用上等待,希望只是看一下就返回,然后做自己的事。那么可以设置成非阻塞。设置方法为:
    int flag;
    
     flag = fcntl(socket_fd, F_GETFL);
     flag |= O_NONBLOCK;
     fcntl(socket_fd, F_SETFL, flag);
对于读和写, 非阻塞,返回-1,并置errno为EAGAIN(等同于EWOULDBLOCK).所以出错处理也不一样。
例:
  
    

设置非阻塞
     n = recvfrom(..);
     if (-1 == n && errno != EAGAIN){
        perror("call to recvfrom");
        exit(1);
     } else if (n == 0 || (n == -1 && errno == EAGAIN)){
          printf("no data yet\n");
          continue;
     } else {
        printf(received from client....);
        n = sendto(...);
     }

阅读(1533) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~