win32 socket connect超时时间是不是75秒,验证,该如何解决
win32 socket connect超时时间是不是75秒,验证
windows下connect的默认超时时间是不是75秒,网上查的
还是会一直阻塞到那
有没有谁验证过的,
求验证??
------解决方案--------------------
connect函数将激发TCP的三次握手过程,在连接建立成功或者出错时返回,出错可能是下列这种情况:
若TCP客户没有收到SYN分节的响应,则返回ETIMEOUT错误,,举例来说,调用connect函数时,4.4BSD内核发送一个SYN,若无响应6s后再发送一个,若仍然无响应则等待24s后再发送一个,若等待了75s仍未响应则返回本错误。
有些系统提供对超时值的管理性控制。
------解决方案--------------------
connect不成功就会直接报错返回的,你的代码有问题吧,不可能一直阻塞在那吧。
------解决方案--------------------
windows下connect的默认超时时间是不是75秒,网上查的
还是会一直阻塞到那
有没有谁验证过的,
求验证??
------解决方案--------------------
connect函数将激发TCP的三次握手过程,在连接建立成功或者出错时返回,出错可能是下列这种情况:
若TCP客户没有收到SYN分节的响应,则返回ETIMEOUT错误,,举例来说,调用connect函数时,4.4BSD内核发送一个SYN,若无响应6s后再发送一个,若仍然无响应则等待24s后再发送一个,若等待了75s仍未响应则返回本错误。
有些系统提供对超时值的管理性控制。
------解决方案--------------------
connect不成功就会直接报错返回的,你的代码有问题吧,不可能一直阻塞在那吧。
------解决方案--------------------
- C/C++ code
#include <winsock2.h> #include <iostream> using namespace std; #pragma comment(lib,"ws2_32.lib") #define PORT 5000 #define IP_ADDRESS "176.84.243.127" int main() { WSADATA data; if(WSAStartup(WINSOCK_VERSION , &data) != 0) return -1; SOCKADDR_IN socketaddr; memset(&socketaddr, 0, sizeof(SOCKADDR_IN)); socketaddr.sin_family = AF_INET; socketaddr.sin_addr.S_un.S_addr = inet_addr(IP_ADDRESS); socketaddr.sin_port=htons(PORT); SOCKET s =socket(AF_INET, SOCK_STREAM, 0); if (s == INVALID_SOCKET) { return -1; } DWORD startTime = GetTickCount(); cout << "Trying to connect to IP Address: " << IP_ADDRESS << " at " << startTime << "ms" << endl; int r = connect(s, (LPSOCKADDR)&socketaddr, sizeof(socketaddr)); DWORD stopTime = GetTickCount(); if (r == SOCKET_ERROR) { int err = WSAGetLastError(); char* pv; FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM, NULL, err, MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), (LPSTR)&pv, 0, NULL); cout << "Connect failed at " << stopTime << "ms" << endl; cout << "Connect time: " << (stopTime - startTime) / 1000 << "s" << endl; cout << "Error " << err << ": " << pv << endl; LocalFree(pv); closesocket(s); return -1; } cout << "Connected at " << stopTime << "ms" << endl; cout << "Connect time: " << (stopTime - startTime) / 1000 << "s" << endl; return 0; }
------解决方案--------------------
你知道它会阻塞就好了,connect的时间你是改不了的,使用非阻塞connect即可。