请问在VX WORKS 下iosIoctl将套接字设置成非阻塞它的参数是怎么弄的哦。
上面错了,应该是ioctl(sockfd, FIONBIO, &flag)
谢谢楼上的。
我设置成非阻塞后。 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(...)
}
已经用了select为什么还要设成非阻塞?select本身就设置了timeout超时时间,设短点不就不阻塞了?
另外,你select的第一个参数好像错了,印象中应该
nret = select(sock_udp_recv + 1, &fd_read, 0, 0, &timeout_recv);
VxWorks的SOCKER支持非阻塞式的操作吗?我印象中是不支持的。而且,我觉得你用select,要非阻塞干什么?不是这种模式的
vxworks中socket是支持非阻塞方式的,可以通过ioctl或者setsockopt来实现