鍚屾鍜屽紓姝?/span>浠呬粎鏄叧浜庢墍鍏蟲敞鐨勬秷鎭浣曢氱煡鐨勬満鍒?/u>,鑰屼笉鏄鐞嗘秷鎭殑鏈哄埗.涔熷氨鏄,鍚屾鐨勬儏鍐典笅,鏄敱澶勭悊娑堟伅鑰呰嚜宸卞幓絳夊緟娑堟伅鏄惁琚Е鍙?鑰屽紓姝ョ殑鎯呭喌涓嬫槸鐢辮Е鍙戞満鍒舵潵閫氱煡澶勭悊娑堟伅鑰?span style="font-weight: bold; ">銆?/span>
闃誨鍜岄潪闃誨,榪欎袱涓蹇典笌紼嬪簭絳夊緟娑堟伅(鏃犳墍璋撳悓姝ユ垨鑰呭紓姝?鏃剁殑鐘舵?/u>鏈夊叧銆?br />
鍚屾/寮傛涓庨樆濉?闈為樆濉炴槸涓ょ粍涓嶅悓鐨勬蹇?瀹冧滑鍙互鍏卞瓨緇勫悎銆?br />
Select
鍑芥暟鍘熷瀷錛?br />
int select(int maxfdp,//鎵鏈夋枃浠舵弿榪扮鐨勬渶澶у煎姞1
fd_set *readfds,//鍏蟲敞鐨勫彲璇繪弿榪扮闆?/span>
fd_set *writefds,//鍏蟲敞鐨勫彲鍐欐弿榪扮闆?nbsp;
fd_set *errorfds,//瑕佸叧娉ㄧ殑寮傚父鎻忚堪絎﹂泦
struct timeval *timeout//瓚呮椂鏃墮棿
);
//浠庤Е鎽稿睆璇誨彇鏁版嵁
int ReadFunc(int fd, char *buf, int len)
{
fd_set fset;
struct timeval tv;
int rval;
FD_ZERO(&fset);
FD_SET(fd, &fset);
tv.tv_sec = 1;
tv.tv_usec = 0;
int pos = 0;
int ret = 0;
while(1){
if ((rval = select( fd+1, &fset, NULL, NULL, &tv)) < 0)
{
if (errno == EINTR)
continue;
else
rval = 0;
}
else if (rval)
{
if(FD_ISSET(fd, &fset)){
if(len > 50){
ret = read(fd, buf, len);
}else{
while(len){
ret = read(fd, buf+pos, len-ret);
len -= ret;
pos += ret;
}
}
}
/* if ( rval<0 && errno != ENODEV) */
/* { perror("read"); */
/* } */
}
return rval;
}
}

]]>