sockfd = socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in severAddr;
severAddr.sin_family = AF_INET;
severAddr.sin_port=htons(139);
severAddr.sin_addr.S_un.S_addr =inet_addr(ppDlg->iplist);
if(connect(sockfd,(struct sockaddr*)&severAddr,sizeof(severAddr))<0)
{
AfxMessageBox("连接不上");
}
如果不设超时的话,要等近20秒才弹出"连接不上",我现在需要在这代码上添加超时,也就是1秒种连不上,就显示“连接不上”,怎么写超时的代码?
sockaddr_in severAddr;
severAddr.sin_family = AF_INET;
severAddr.sin_port=htons(139);
severAddr.sin_addr.S_un.S_addr =inet_addr(ppDlg->iplist);
if(connect(sockfd,(struct sockaddr*)&severAddr,sizeof(severAddr))<0)
{
AfxMessageBox("连接不上");
}
如果不设超时的话,要等近20秒才弹出"连接不上",我现在需要在这代码上添加超时,也就是1秒种连不上,就显示“连接不上”,怎么写超时的代码?
//--------------------------------------------------------------------------
//设置为非阻塞方式连接
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);
//--------------------------------------------------------------------------
为什么不好?我用的就是SAM2002(无味) 的方法。