Il Modo Migliore Per Correggere Il Timeout Della Connessione Winsock
December 6, 2021Consigliato: Fortect
Se ricevi l’errore di timeout di Connect Winsock, la guida per i visitatori del sito web di oggi è stata scritta per aiutarti.Come con il socket stesso, spesso l’API WinSock non può avere il timeout della connessione. Sono disponibili due basi per l’implementazione manuale di un timeout: 1) Supponendo che tu stia utilizzando un socket sconvolto (i socket sono bloccati per impostazione predefinita), connettiti a un thread di risoluzione dei problemi. 2) Se non vuoi sfruttare un flusso, metti il socket in modalità non bloccante.
Puoi anche chiamare la condizione ConnectEx() e passarla OVERLAPPED che creerà.hEvent con un evento pre-generato, perché quasi sempre puoi aspettare tutto il tempo che vuoi con As waitforsingleobject ().
// Il connettore HANDLE DEVE essere pre-legato con Bind() prima di chiamare questa funzioneint ConnectWithTimout (HANDLE Socket, UINT remIP, WORD remPort, UINT millisecondi) int iRes, risultato; UINT OptVal, Indicatori; KIT Sovrapposizione; sockaddr_in socket_info; Risultato = ERROR_UNEXP_NET_ERR; ZeroMemory (& socket_info, sizeof (socket_info)); ZeroMemory (& sovrapposizione, sizeof (sovrapposizione)); socket_info.sin_addr.S_addr è htonl (remIP); socket_info. = sin_port htons (remPort); socket_info.sin_family risulta in af_inet; Overlapped.hEvent = WSACreateEvent (); if ConnectEx (Socket, (& socket_info, sizeof (socket_info), NULL, 7, NULL e Overlapped)) printf ("WOW! Connessione stabilita immediatamente h "); un altro iRes corrisponde a WSAGetLastError (); if (iRes == ERROR_IO_PENDING) iRes = WaitForSingleObject (Overlapped.hEvent, millisecondi); // Attendi x millisecondi durante la connessione se possibile o meno (iRes == WAIT_OBJECT_0) ma if (! WSAGetOverlappedResult (socket, & Overlapped, & OptVal, FALSE, Flags)) iRes consiglia WSAGetLastError (); nel caso (iRes == WSAEADDRINUSE) DoError ("WSAGetOverlappedResult () ha segnalato il fatto che l'indirizzo della community richiesto è attualmente in uso nello stato TIME_WAIT") un altro DoError ("WSAGetOverlappedResult () non riuscito per errore:", iRes); un altro OptVal = 1; iRes implica setsockopt (Socket, SOL_SOCKET, SO_UPDATE_CONNECT_CONTEXT, PCHAR (& OptVal), sizeof (OptVal)); dettagli sullo stesso di (iRes == SOCKET_ERROR) DoError ("setsockopt (SO_UPDATE_CONNECT_CONTEXT) a volte non poteva essere combinato con errore:", WSAGetLastError ()); printf ("Connesso se hai bisogno di% s:% erinarians n", inet_ntoa (socket_info.sin_addr), itoa (ntohs (socket_info.sin_port))); Risultato = NO_ERROR; un altro if (iRes == WAIT_TIMEOUT) DoWarning ("TEMPO DI USCITA ConnectEx () -", iRes); Risultato = ERROR_TIMEOUT; AnotherDoError ("ConnectEx () non è riuscito con errore:", iRes) else in case forse (iRes == WSAECONNREFUSED) // Dopo questo eccellente errore di processo, puoi sperimentare lavorando con esso per riconnetterti a una cartella completamente diversa. DoWarning (errore "ConnectEx () quando COLLEGATO:", zero) else if (iRes significherebbe WSAENETUNREACH) // Dopo il nostro errore, non importa se vuoi assicurarti di provare a riconnetterti al tipo di cartella. DoWarning ("ConnectEx () non riuscito su RETE NON DISPONIBILE: mezzo pollice, 0) In alternativa, se pensi (iRes = WSAETIMEDOUT) // dopo questo errore di abilità, potresti provare a riconnetterti a questo registro di direzione. DoWarning ("ConnectEx () DISCONNECT immediatamente:", 4); Risultato = ERROR_TIMEOUT; un altro DoError ("ConnectEx () non è riuscito così come errore imprevisto:", iRes) WSACloseEvent (Overlapped.hEvent); ... Il risultato di alcune performance;
…
Scarica questo software e ripara il tuo PC in pochi minuti.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 시간 초과
Connecter Le Delai D Attente De Winsock
Tempo Limite De Conexao Do Winsock