请问在VX WORKS 下iosIoctl将套接字设置成非阻塞它的参数是怎么弄的哦。

qqqyyy10000   2008-3-4 09:58 楼主
请问在VX WORKS 下iosIoctl将套接字设置成非阻塞它的参数是怎么弄的哦。

回复评论 (8)

进来学习
点赞  2008-3-4 15:00
  1. int flag = 1;
  2. iosIoctl(sockfd, FIONBIO, &flag);
点赞  2008-3-4 15:30
上面错了,应该是ioctl(sockfd, FIONBIO, &flag)
点赞  2008-3-4 15:32
谢谢楼上的。
我设置成非阻塞后。 FD_ISSET()总是返回非0
/*create socket*/
UDPCreate_Recv();
ioctl(sock_udp_recv, FIONBIO, &ul)
bind(sock_udp_recv, (struct sockaddr_in*)&addr_udp_recv,  sizeof(addr_udp_recv));
while(1)
{
    FD_ZERO(&fd_read);
    FD_SET(sock_udp_recv, &fd_read);  
    timeout_recv.tv_sec = 1;
    timeout_recv.tv_usec = 1;
    nret = select(0, &fd_read, 0, 0, &timeout_recv);

   /*问下,这里总是返回为非0*/
    nret = FD_ISSET(sock_udp_recv, &fd_read);      if(!nret)
    {
        continue;
    }
     recvfrom(...)
}
点赞  2008-3-5 10:20
已经用了select为什么还要设成非阻塞?select本身就设置了timeout超时时间,设短点不就不阻塞了?

另外,你select的第一个参数好像错了,印象中应该

nret = select(sock_udp_recv + 1, &fd_read, 0, 0, &timeout_recv);
点赞  2008-3-5 15:58
用setsockopt
点赞  2008-3-5 20:44
VxWorks的SOCKER支持非阻塞式的操作吗?我印象中是不支持的。而且,我觉得你用select,要非阻塞干什么?不是这种模式的
点赞  2008-3-7 22:17
vxworks中socket是支持非阻塞方式的,可以通过ioctl或者setsockopt来实现
点赞  2008-3-8 16:18
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复