Melhor Maneira De Corrigir O Tempo Limite De Conexão Do Winsock
December 7, 2021Recomendado: Fortect
Se você inserir um erro de tempo limite do WinSock do Connect, agora o guia do usuário foi escrito para ajudá-lo.Tal como acontece com o soquete de seu site, infelizmente a API WinSock não pode apresentar um tempo limite de conexão. Você tem pelo menos duas respostas para implementar manualmente um novo tempo limite: 1) Supondo que você esteja usando um soquete estranho específico (os soquetes são bloqueados por padrão), conecte-se a um thread de solução de problemas cuidadosamente. 2) Se você não quiser ajudá-lo a usar um stream, mude a tomada para o modo sem bloqueio.
Você também pode chamar a cláusula ConnectEx () e passá-la OVERLAPPED para ajudar make.hEvent com um evento pré-gerado, quando você considera que normalmente pode esperar o quanto quiser com As waitforsingleobject ().
// O socket HANDLE DEVE ser pré-vinculado a Bind () antes de chamar esta funçãoint ConnectWithTimout (HANDLE Socket, UINT remIP, WORD remPort, UINT milissegundos) int iRes, resultado; UINT OptVal, Indicadores; Sobreposição de KIT; sockaddr_in socket_info; Resultado = ERROR_UNEXP_NET_ERR; ZeroMemory (& socket_info, sizeof (socket_info)); ZeroMemory (& overlap, sizeof (overlap)); socket_info.sin_addr.S_addr é htonl (remIP); socket_info. = sin_port htons (remPort); socket_info.sin_family equivale a af_inet; Overlapped.hEvent = WSACreateEvent (); if ConnectEx (Socket, (& socket_info, sizeof (socket_info), NULL, 0, NULL, & Overlapped)) printf ("WOW! Conexão estabelecida não imediatamente d"); outro iRes pode corresponder a WSAGetLastError (); if (iRes == ERROR_IO_PENDING) iRes = WaitForSingleObject (Overlapped.hEvent, milissegundos); // Espere x milissegundos que conectando caso seja possível (iRes == WAIT_OBJECT_0) mas if (! WSAGetOverlappedResult (socket, & Overlapped, & OptVal, FALSE, Flags)) iRes implica WSAGetLastError (); contanto que (iRes == WSAEADDRINUSE) DoError ("WSAGetOverlappedResult () sugeriu que o endereço da comunidade solicitado já está em uso no estado TIME_WAIT") outro DoError ("WSAGetOverlappedResult () falhou com o erro:", iRes); outro OptVal é igual a 1; iRes implica setsockopt (Socket, SOL_SOCKET, SO_UPDATE_CONNECT_CONTEXT, PCHAR (& OptVal), sizeof (OptVal)); exatamente o mesmo que ser (iRes == SOCKET_ERROR) DoError ("setsockopt (SO_UPDATE_CONNECT_CONTEXT) certamente não pode ser combinado com o erro:", WSAGetLastError ()); printf ("Conectado se os clientes precisarem de% s:% s n", inet_ntoa (socket_info.sin_addr), itoa (ntohs (socket_info.sin_port))); Resultado significa NO_ERROR; outro if (iRes == WAIT_TIMEOUT) DoWarning ("EXIT TIME ConnectEx () -", iRes); Resultado = ERROR_TIMEOUT; anotherDoError ("ConnectEx () falhou com o erro:", iRes) senão no cenário if (iRes == WSAECONNREFUSED) // Após este erro de processo, você pode se divertir com ele para se reconectar a uma grande pasta diferente. DoWarning ("erro ConnectEx () no caso de CONNECTED:", zero) senão assumindo (iRes implica WSAENETUNREACH) // Depois de considerar o erro, não importa se você realmente deseja tentar reconectar a determinada pasta. DoWarning ("ConnectEx () falhou em UNAVAILABLE NETWORK: meia polegada, 0) Alternativamente, se você pensar (iRes = WSAETIMEDOUT) // após este erro de habilidade, as famílias podem tentar se reconectar ao log de instrução distinto. DoWarning ("ConnectEx () DESCONECTE imediatamente:", 4); Resultado = ERROR_TIMEOUT; outro DoError ("ConnectEx () não teve êxito com erro inesperado:", iRes) WSACloseEvent (Overlapped.hEvent); ... O resultado do qual o desempenho;
…
Baixe este software e conserte seu PC em minutos.Connect Winsock Timeout
Connect Winsock Timeout
Limit Czasu Polaczenia Winsock
Winsock Zeituberschreitung Verbinden
Time Out Van Winsock Verbinden
Conectar El Tiempo De Espera De Winsock
연결 Winsock 시간 초과
Collega Il Timeout Di Winsock
Connecter Le Delai D Attente De Winsock