当前位置: 技术问答>linux和unix
关于socket的非阻塞
来源: 互联网 发布时间:2016-09-29
本文导语: 我在串口通信的时候用了socket的非阻塞 在同一段程序中我要接收socket发送的数据 也能用socket么 | 没有详细看,但看到select的使用有问题,主要是下面这段: FD_ZERO(&rdfds); //用select函数之前先...
我在串口通信的时候用了socket的非阻塞
在同一段程序中我要接收socket发送的数据 也能用socket么
在同一段程序中我要接收socket发送的数据 也能用socket么
|
没有详细看,但看到select的使用有问题,主要是下面这段:
FD_ZERO(&rdfds); //用select函数之前先把集合清零 0812 start
FD_SET(fd , &rdfds); //把要检测的句柄加入到集合里
FD_SET(sfd , &rdfds); //检测网口套接字20100916
ret = select(fd + 1, &rdfds, NULL, NULL, NULL); //检测上面设置到集合rdfds里的句柄是否有可读信息
if(select(1, &rdfds, NULL, NULL, NULL) > 0) //有了上面那句,这一句就不需要的。
另外,上面的程序改为:
FD_ZERO(&rdfds); //用select函数之前先把集合清零 0812 start
FD_SET(fd , &rdfds); //把要检测的句柄加入到集合里
FD_SET(sfd , &rdfds); //检测网口套接字20100916
ret = select(fd + 1, &rdfds, NULL, NULL, NULL); //检测上面设置到集合rdfds里的句柄是否有可读信息
if(select(1, &rdfds, NULL, NULL, NULL) > 0) //有了上面那句,这一句就不需要的。
另外,上面的程序改为:
FD_ZERO(&rdfds); //用select函数之前先把集合清零 0812 start
FD_SET(fd , &rdfds); //把要检测的句柄加入到集合里
FD_SET(sfd , &rdfds); //检测网口套接字20100916
if (fd>sfd)
ret = select(fd + 1, &rdfds, NULL, NULL, NULL); //检测上面设置到集合rdfds里的句柄是否有可读信息
else
ret = select(sfd + 1, &rdfds, NULL, NULL, NULL); //检测上面设置到集合rdfds里的句柄是否有可读信息