Problem mit non-blocking Socket



  • Hi,

    kann mir einer erklären was das bedeuten soll?

    "Eine Anforderung zum Senden oder Empfangen von Daten wurde verhindert, da der Socket nicht verbunden ist und (beim Senden über einen Datagrammsocket mit einem sendto-Aufruf) keine Adresse angegeben wurde."

    Mein Kumpel bekommt die Meldung angezeigt, wenn er mein Spiel startet. Zuerst wird eine Verbindung hergestellt. Der Server meldet auch, neuen Client angenommen und dann kommt die Meldung oben und der Server meldet das die Verbindung geschlossen wurde.

    Ich bekomm die Meldung auch wenn ich das Spiel starte ohne das der Server gestartet ist. Aber das passt ja irgendwie nicht zusammen, da ich problemlos von meinem Zweitrechner auf den Server connecten kann.

    Die Verbindung erfolgt über DNS bei dyndns.org, da ist meine aktuelle Internet IP hinterlegt.

    Falls irgendwer ne Idee hat woran es liegen könnte oder sonst noch Infos haben möchte, einfach melden.

    Ich bin ziemlich durch mit meinem Latein, hab schon fast alles versucht.

    Edit:
    Hier noch eine Frage ich benutze ja connect um die Verbindungn herzustellen:

    int conid = connect(_winsock,(SOCKADDR*)&_addr, sizeof(SOCKADDR));
    	// Verbindung herstellen
    	conid = network->openconnection(buf, port);
    	if(rc == SOCKET_ERROR && WSAGetLastError() != WSAEWOULDBLOCK)
    	{
    		printf("Fehler: connect gescheitert, fehler code: %d\n", WSAGetLastError());
    		return 74;
    	}
    	else
    	{
    		printf("Verbunden mit Server\n");
    	}
    

    Stimmt doch so, oder? Muss ich WSAGetLastError vielleicht 2 oder 3 mal aufrufen?

    MfG
    Scarabol



  • 1. falsches forum (WinAPI)
    2. willst du dir nicht eine netzwerkbibliothek suchen, die das für dich abstrahiert? z.bsp. raknet
    3. meine erste idee bei so was ist immer: firewall?

    bb



  • ups mein Fehler @Mod bitte verschieben, danke

    Firewall ist aus die IP und Port sind im Router durchgeklemmt.

    Zufälligerweise hab ich genau schon RakNet ausprobiert, aber bisher leider keine guten Erfahrungen mit solchen Libs gemacht, da müsste ich jetzt alles umstellen und neu testen. Außerdem bin ich dann immer von der Lib abhängig usw 😉

    Ich hab gerade noch gelesen das mit select noch gewartet werden muss bis der Socket lesbar ist... Vielleicht sollte ich mir das mal anschauen, oder kann mir vielleicht einer ein Beispiel liefern?

    Hm, wie es scheint muss mein Programm wirklich warten bis der Socket bereit ist, das hatte ich total vergessen 🙂

    MfG
    Scarabol



  • Scarabol schrieb:

    Außerdem bin ich dann immer von der Lib abhängig usw 😉

    so bist du so gar vom betriebssystem abhängig...

    das hier ist aber nen sehr gutes tutorial, musst du mal gucken, was du anders gemacht hast, als die dort:
    http://www.c-worker.ch/tuts/wstut_op.php

    bb



  • Das Tutorial kenn ich hab ich mir schonma vor einiger Zeit angeguckt. Find ich auch wirklich gut, nur geht es da fast ausschließlich um blocking Sockets also nicht meine Fachrichtung...

    Danke für den Link ich denke es lag einfach an dem Timeout ich muss jetzt nochma testen ob mein Kumpel die Verbindung herstellen kann. Dann guck ich weiter...

    Manchmal ist es schon komisch da will ich Fehler einfach nicht finden und dann löse ich sie teilweise während ich den Eintrag hier im Forum schreibe :?

    MfG
    Scarabol



  • > nur geht es da fast ausschließlich um blocking Sockets also nicht meine Fachrichtung...

    Was du da machst ist aber noch schlechter als Blocking Sockets.



  • öh das versteh ich jetzt nicht was mach ich den falsch?

    Der Fehler lag wirklich am Timeout mein Kumpel brauchte einfach zu lange um eine Verbindung aufzubauen. Jetzt klappt alles!

    MfG
    Scarabol



  • Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ 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.



  • Ad aCTa schrieb:

    Was du da machst ist aber noch schlechter als Blocking Sockets.

    Hi,
    das versteh ich nicht, wieso? Kannst du das genauer erklären? Hab ich was übersehen?

    MfG
    Scarabol


Anmelden zum Antworten