當前位置:編程學習大全網 - 源碼下載 - 如何判斷安卓插座斷線

如何判斷安卓插座斷線

非阻塞模式,如果暫時沒有數據,返回值也將是

使用select()函數測試套接字是否可讀時,如果select()函數的返回值是1,

而recv()()函數讀取的數據長度為0,就說明套接字已經斷開。

經過代碼測試,如果進程接收到壹些信號,比如:EINTR,當recv()的返回值小於等於0時,需要判斷errno是否等於EINTR。如果errno == EINTR,則說明程序收到信號後返回recv函數,socket連接仍然正常,socket連接應該不會關閉。

如果寫的話,我覺得還是要考慮的,就是寫的太快,緩沖區可能就滿了。這是,errno是EAGAIN,妳可以根據實際需要寫幾次。如果errno是EAGAIN。

當然,還有壹種情況類似於讀的時候寫,所以妳讀是為了檢查errno。如果是e-gain或者EINTR,最好不要馬上停止操作,試試EAGAIN!

這是我寫的代碼!

int SocketConnected(int sock)

{

int res,recvlen

char buf[20]= { ' \ 0 ' };

struct timeval超時={3,0 };

fd _ set rdfs

FD_ZERO。rdfs);

FD _ SET(sock & amp;rdfs);

res = select(sock+1,& amprdfs,NULL,NULL & amp;超時);

if(RES & gt;0){

recvlen = recv(sock,buf,sizeof(buf),0);

if(recv len & gt;0){

printf(" socket connected \ n ");

返回1;

} else if(recv len & lt;0 ){

if(errno == EINTR){

printf(" socket connected \ n ");

返回1;

}否則{

printf("插座斷開!再次連接!\ n ");

返回0;

}

} else if (recvlen == 0){

printf("插座斷開!再次連接\ n ");

返回0;

}

} else if(res == 0 ){

//超時

printf(" socket connected \ n ");

返回1;

} else if(RES & lt;0){

if (errno == EINTR){

printf(" socket connected \ n ");

返回1;

}否則{

printf("插座斷開!再次連接!\ n ");

返回0;

}

}

返回0;

}

  • 上一篇:有什麽借錢的app?
  • 下一篇:如何在阿裏雲搭建服務器,如何在阿裏雲搭建服務器進行中轉挖掘。
  • copyright 2024編程學習大全網