socket Client 天劍最大重連次數

#include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  int readnet( int sockid, register char *ptr, short nbytes)  { int nleft=0,nread=0; fd_set          Readyfd; struct          timeval timeout; int             ret; nleft=nbytes; FD_ZERO(&Readyfd); FD_SET(sockid, &Readyfd); timeout.tv_sec = 0; timeout.tv_usec = 500000;//0.5秒 ret = select(sockid+1, NULL, &Readyfd, NULL, &timeout); if(ret<=0) { return -1; } nleft=nbytes; while(nleft > 0)  {                             nread = read(sockid,ptr,nleft); if (nread <= 0 )  { return (nread); } nleft -=nread; ptr +=nread; } return nbytes-nleft; } int Client() { char buf[200] = {0}; int iSockfd = socket(PF_INET,SOCK_STREAM,0);/*1. 準備socket*/ if(iSockfd == -1) { return -1; } struct sockaddr_in addr; addr.sin_family = PF_INET; addr.sin_port = htons(17777); inet_aton("127.0.0.1",&addr.sin_addr); //unsigned long ul = 1; //ioctl(iSockfd, FIONBIO, &ul); //設置爲非阻塞模式 struct          timeval timeout; timeout.tv_sec = 10; timeout.tv_usec = 500000;//0.5秒 setsockopt(iSockfd, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, sizeof(timeout));   fd_set          Readyfd; int             ret; int iNum = 0; while(-1 == connect(iSockfd,(struct sockaddr*)&addr, sizeof(addr))) { iNum ++; printf("--------%d  次重連\n",iNum); sleep(1); if(iNum == 10) { printf("-----------連接失敗\n"); return -1; } } ret = select(iSockfd, NULL, &Readyfd, NULL, &timeout); //printf("--------Connect  =%d\n",iRes); printf("--------select =%d\n",ret); write(iSockfd,(char *)"hello world ,I'm Client", 100); //ret = select(iSockfd, NULL, &Readyfd, NULL, &timeout); printf("---------ret=%d\n",ret); int i; for( i=0;i<6;i++) { if(ret == 0) { int iRet = read(iSockfd, buf, 100); printf("---1----超時 次數:%d\n",i); if(iRet <= 0) { continue; } else { break; } } if(ret>0) { int iSet = FD_ISSET(iSockfd, &Readyfd); int iRet = read(iSockfd, buf, 100); printf("---2----超時 次數:%d\n",i); } } //int iRet = read(iSockfd, buf, 100); printf("-------buf=%s\n",buf); printf("--------------函數結束--------\n"); return 0; } int main() { Client(); return 0; }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章