Chinaunix首页 | 论坛 | 博客
  • 博客访问: 200577
  • 博文数量: 61
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 22
  • 用 户 组: 普通用户
  • 注册时间: 2015-01-11 20:47
文章分类
文章存档

2017年(3)

2016年(11)

2015年(47)

我的朋友

分类: C/C++

2015-02-06 15:39:04

    下面提供一种recvfrom的非阻塞设置方法,希望能对不清楚的同仁能有所帮助。
 
 
    if (-1 == fcntl(iSocketfd, F_SETFL, O_NONBLOCK))
    {
        printf("fcntl socket error!\n");
        return -1;
    }
    int iSocketLen = sizeof(struct sockaddr_in);
 
    /* set recvfrom from server timeout */
    struct timeval tv;
    fd_set readfds;
    tv.tv_sec = TIME_OUT_TIME;
    tv.tv_usec = 0;
    FD_ZERO(&readfds);
    FD_SET(iSocketfd, &readfds);
    if (select(iSocketfd+1,&readfds,NULL, NULL, &tv) > 0)
    {
        iRecvNum = recvfrom(iSocketfd,(void *)stRecvBuf,sizeof(*(stRecvBuf)),0,    (struct sockaddr *)stRemote,&iSocketLen);
        if (-1 == iRecvNum)
        {
            printf("received data error!\n");
            iRet=0;
        }
        iRet=1;
        printf("iRecvNum is %d\n",iRecvNum);
    }
    else
    {
        printf("timeout!there is no data arrived!\n");
        iRet=0;
    }
 
 
   上面的代码只是我程序中的一段,所以上下文衔接肯定不好,但基本意思已经表达得很清楚了。另外,因为代码量太小,所以就不上传源码了:)
   欢迎转载,请注明出处。
阅读(4332) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~