socket() connect() timeout einstellen
-
Hallo zusammen,
ich arbeite mit WinXP Prof und MS Visual C++ 6.0 / MFC
Ich benutze folgende Funktionen um einen Verbinung über einen Socket herzustellen:
struct sockaddr_in peer; peer.sin_family = AF_INET; peer.sin_port = htons(10001); peer.sin_addr.s_addr = inet_addr(IPAdresse); UINT SocketOK = mySocket = socket (AF_INET, SOCK_STREAM, 0); UINT ConnectOK = connect(mySocket, (struct sockaddr*)&peer, sizeof(peer)); UINT w = send(mySocket,(LPCTSTR) bySendBuff, 6, 0); int t = recv(mySocket, byReadBuff1, 8,0); closesocket(mySocket);
Das Problem ist, wenn eines meiner Gerät nicht angeschlossen ist, braucht die connect() Funktion ewig, bis das Programm weiterläuft.
Weiß irgendjemand von Euch wie man das Zeitinterval verstellen kann?Vielen Dank für Euro Hilfe
MfG Dippi
-
Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Rund um die Programmierung in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Nochmal verschieben, hat so Spass gemacht.
Schau mal das an vlt. Hilfts.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/select_2.asp
-
Den connect timeout kann man nur systemweit in der Registry einstellen...
-
Abend,
setze den Socket vor connect in den nicht blockierenden Zustand mit setsockopt.
Lasse ein connect auf den socket los.
connect wird Dir einen Fehler liefern - WSA_WOULDBLOCK oder so. Ignorieren!
lasse ein select auf den socket los mit dem gewünschten TimeOut
lassen ein getsockopt mit SO_ERROR auf den socket los falls select fehlschlägt
oder in den Timeout läuft.Viel Erfolg
RB
-
Hallo,
zuerst mal danke für die Hilfe.
Also wenn ich das richtig verstanden habe:
- Socket erstellen
- setsockopt()
- daraufhin bringt connect() einen Fehler
- select() mit Timeoutjetzt nur meine Frage...welche Parameter stell ich bei setsockopt() und select() ein?
Danke
MfG Dippi
-
Mit ioctlsocket, Kommando FIONBIO, stellst du den Socket auf non-blocking. setsockopt ist hier falsch.
Socket bei select ins writefds tun und den Timeout angeben.
-
zuerst mal danke
was sind denn die anderen Parameter bei der select() ??
Brauch ich dann die connect() eigentlich noch?Danke
MfG Dippi
-
was sind denn die anderen Parameter bei der select() ??
Steht in der Doku.
Brauch ich dann die connect() eigentlich noch?
Ja.
-
mmmh
-
@Buddy Love: Warum postest du immer so sinnfreie Beiträge?
-
weil ihn ja niemand daran hindert.