目的:想让套接字连接不成功后,返回的速度快一点
代码如下:
cli.sin_addr.s_addr=inet_addr("10.1.11.101");
cli.sin_family=AF_INET;
cli.sin_port=htons(8000);
clisock=socket(AF_INET,SOCK_STREAM,0);
struct timeval m_tm;
m_tm.tv_sec=5000;
m_tm.tv_usec=0;
setsockopt(clisock,SOL_SOCKET, SO_RCVTIMEO, (char *)&m_tm, sizeof(m_tm));
int connerror=connect(clisock,(sockaddr*)&(cli),sizeof(cli));
if (connerror!=0) {
shutdown(clisock,SB_BOTH);
closesocket(clisock);
return;//连接不成功,返回
}
现在的问题是如果套接字连接不成功,要等大概20秒才能返回,请问各位怎样才能让这个时间缩短啊??
先谢了~~~
代码如下:
cli.sin_addr.s_addr=inet_addr("10.1.11.101");
cli.sin_family=AF_INET;
cli.sin_port=htons(8000);
clisock=socket(AF_INET,SOCK_STREAM,0);
struct timeval m_tm;
m_tm.tv_sec=5000;
m_tm.tv_usec=0;
setsockopt(clisock,SOL_SOCKET, SO_RCVTIMEO, (char *)&m_tm, sizeof(m_tm));
int connerror=connect(clisock,(sockaddr*)&(cli),sizeof(cli));
if (connerror!=0) {
shutdown(clisock,SB_BOTH);
closesocket(clisock);
return;//连接不成功,返回
}
现在的问题是如果套接字连接不成功,要等大概20秒才能返回,请问各位怎样才能让这个时间缩短啊??
先谢了~~~
解决方案 »
- mfc中在列表控件里每次排序后总会将姓名数据传给学号????
- 请教post 验证码登陆网站的问题?
- 求助一个vc小程序修改,分不是问题
- 图形闪烁
- 谁知道那里可以下载到VS.Net 2005 Beta1完整版?
- dll中取得一个*.exe程序句柄问题//急
- 一个关于文件读取的问题,给满分.UP也有~~~~~~~~~~~急!!!~~~~~~~~~~~~~~~~~~
- 各位老大!我用vc5用动态库编译的debug版本的程序为什么不能运行和调试了??
- MFC/OpenGL 载入模型之后 运行很缓慢, 该如何优化呢?
- 关于用atl编服务器组件的问题?
- ServerXMLHTTP.Open方法ATL里成功了,可是写成API就不可以。
- 请问Windows Api中,有没有哪个是用来控制音量的
//--------------------------------------------------------------------------
//设置为非阻塞方式连接
unsigned long ul = 1;
int ret = ioctlsocket(m_sSocket, FIONBIO, (unsigned long*)&ul);
if(ret == SOCKET_ERROR)
{
err = WSAGetLastError();
closesocket(m_sSocket);
m_sSocket = NULL;
return FALSE;
} struct timeval timeout ; // 超时结构
fd_set r; FD_ZERO(&r);
FD_SET(m_sSocket, &r);
timeout.tv_sec = iTimeout; // 连接超时设置
timeout.tv_usec =0; connect(m_sSocket,(LPSOCKADDR)&server,sizeof(SOCKADDR));
ret = select(0, 0, &r, 0, &timeout);
if ( ret <= 0 )
{
err = WSAGetLastError();
closesocket(m_sSocket);
m_sSocket = NULL;
return FALSE;
} //设回阻塞模式
ul = 0 ;
ret = ioctlsocket(m_sSocket, FIONBIO, (unsigned long*)&ul);
//--------------------------------------------------------------------------
//接收超时
//-------------------------------------------
//接收超时设置
struct timeval outtime ; // 超时结构 FD_SET fdr = {1, m_sSocket};
outtime.tv_sec = timeout;
outtime.tv_usec =0;
int nSelectRet;
//------------------------------------------------------------
//网络只认单字节串,而EVC里多字节;发送的UNICODE串转换成单字节串
UINT nLen = len * 2;
char *pByte = new char[nLen+1];
memset(pByte, 0, nLen+1);
WideCharToMultiByte(CP_ACP, NULL, buf, wcslen(buf),pByte, nLen, NULL, NULL);
int nRet; nSelectRet=::select(0, &fdr, NULL, NULL, &outtime); //检查可读状态
if(SOCKET_ERROR==nSelectRet)
{
err = WSAGetLastError();
closesocket(m_sSocket);
m_sSocket = NULL;
return -1;
}
if(nSelectRet==0) //超时发生,无可读数据
{
AfxMessageBox(L"接收超时");
err = WSAGetLastError();
closesocket(m_sSocket);
m_sSocket = NULL;
return -1;
}
else
{
//接收数据
nRet = recv(m_sSocket, pByte, nLen, 0);
if(nRet == SOCKET_ERROR)
{
err = WSAGetLastError();
}
} //------------------------------------------- MultiByteToWideChar(CP_ACP, NULL, pByte, nLen, buf, len);
delete [] pByte;
pByte = NULL;
//---------------------------------------------------------------------