读书人

win32 socket connect超时时间是不是7

发布时间: 2012-04-03 12:38:19 作者: rapoo

win32 socket connect超时时间是不是75秒,验证
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即可。

读书人网 >C++

热点推荐