vc判断是否可正常连接
qq:9611153 微信lgs9611153
时间:2010-11-18 11:10:55
背景原因:
判断连接是否正常代码,如果不正常需要断开重新连接
所需资源:
Vc socket
代码:
unsigned long arg = 1; ioctlsocket(nSocket, FIONBIO, (unsigned long*)&arg); //设置非阻塞方式连接
//getsockopt(nSocket,SOL_SOCKET,0x700C/*SO_CONNECT_TIME*/,&Connect_Time,sizeof(Connect_Time)); struct sockaddr_in addr_talk; memset(&addr_talk, 0, sizeof(sockaddr_in)); addr_talk.sin_family = AF_INET; addr_talk.sin_port = htons(nVssRecvPort); addr_talk.sin_addr.s_addr = nVssIp; connect(nSocket,(const struct sockaddr *)&addr_talk, sizeof(sockaddr_in));
struct timeval timeout; timeout.tv_sec=5; timeout.tv_usec=0;
fd_set fdConnect; FD_ZERO(&fdConnect); FD_SET(nSocket, &fdConnect); int retval = select(nSocket+1, NULL, &fdConnect, NULL,&timeout);
socklen_t optlen; optlen = sizeof(retval); getsockopt (nSocket, SOL_SOCKET, SO_ERROR, (char*)&retval, &optlen); if (retval != 0) { m_pModuleMng->PrintfLog(LOG_INFO,"getsockopt,nSocket socket error."); closesocket(nSocket);//断开,需重新连接 return -1; } arg = 0; ioctlsocket(nSocket, FIONBIO, &arg);
|