|
【MXCHIP Open1081】FD_ISSET函数的讨论
[复制链接]
本帖最后由 ljj3166 于 2014-12-7 22:34 编辑
MXCHIP在API介绍中,对于FD系列的功能函数只是简单的一带而过
FD_ZERO(p)
清空指针 p指向的套接字集合
FD_SET(n, p)
在指针p 指向的套接字集合中增加套接字 n
FD_CLR(n, p)
在指针p 指向的套接字集合中删去套接字 n
FD_ISSET(n, p)
查看在指针p 指向的套接字集合中的套接字 n是否被置位,返回 1表示置位,返回0表示未被置位
虽然没有深入的介绍函数的作用
但是实际使用过程中,个人觉得FD_ISSET(n, p) 这个函数是非常重要的
它返回的值直接决定能否该套接字下能否进行数据的发送
譬如:
for(i=0;i<8;i++) {
if (clientfd【i】 != -1) {
if (FD_ISSET(clientfd【i】, &readfds)) {
tmp = get_tem();
itostr(SEND_buff,tmp/100);
strcat(SEND_buff,".");
itostr(TMP_buff,tmp%100);
strcat(SEND_buff,TMP_buff);
itostr(AD_buff,ADC_ConvertedValue[0]);
strcat(SEND_buff,"&");
strcat(SEND_buff,AD_buff);
SEND_str_len = strlen(SEND_buff)-1;
send(clientfd【i】, "Temperture&AD Value:", sizeof("Temperture&AD Value:"), 0);
send(clientfd【i】, SEND_buff, SEND_str_len, 0);
send(clientfd【i】, "\r\n", sizeof("\r\n"), 0);
}
else if (FD_ISSET(clientfd【i】, &exceptfds))
clientfd【i】 = -1;
}
}
上面这段代码中,如果FD_ISSET被置位,才能够发送相关的数据
实际使用中,如果没有向OPEN1081发送数据的话,数据是不会被发送至受端的
再看:
for(i=0;i<8;i++) {
if (clientfd【i】 != -1) {
if (!FD_ISSET(clientfd【i】, &readfds)) {
tmp = get_tem();
itostr(SEND_buff,tmp/100);
strcat(SEND_buff,".");
itostr(TMP_buff,tmp%100);
strcat(SEND_buff,TMP_buff);
itostr(AD_buff,ADC_ConvertedValue[0]);
strcat(SEND_buff,"&");
strcat(SEND_buff,AD_buff);
SEND_str_len = strlen(SEND_buff)-1;
send(clientfd【i】, "Temperture&AD Value:", sizeof("Temperture&AD Value:"), 0);
send(clientfd【i】, SEND_buff, SEND_str_len, 0);
send(clientfd【i】, "\r\n", sizeof("\r\n"), 0);
}
else if (FD_ISSET(clientfd【i】, &exceptfds))
clientfd【i】 = -1;
}
}
这段代码,FD_ISSET未被置位,则允许数据的发送
然通过这两段代码的测试,似乎可以理解,FD_ISSET其实是在检测通道是否有数据接收或者发送
如果有,则置位,否则复位。
很希望庆科的大神们能把这几个函数和通信的关系好好介绍一下
|
|