FD_WRITE



  • Ich hab das so verstanden, dass eine FD_WRITE message an mein Fenster geschickt wird, sobald ich Daten über die Verbindung senden kann. Deshalb habe ich alle zu sendenden Daten gepuffert und will diese nun nach erhalt der FD_WRITE message abschicken.
    Problem: Da passiert nix!

    Hat jemand ne Ahnung woran das liegen könnte?
    Dann wärs n feiner Zug von ihm mir zu Helfen, cya. 🙂



  • Hast Du

    //WSAAsyncSelect
    //The WSAAsyncSelect function requests Windows message-based notification of network events for a socket.
    
    int WSAAsyncSelect(
      SOCKET s,
      HWND hWnd,
      unsigned int wMsg,
      long lEvent
    );
    
    /*
    Parameters
    s 
    [in] Descriptor identifying the socket for which event notification is required. 
    hWnd 
    [in] Handle identifying the window that will receive a message when a network event occurs. 
    wMsg 
    [in] Message to be received when a network event occurs. 
    lEvent 
    [in] Bitmask that specifies a combination of network events in which the application is interested.
    */
    

    verwendet?

    Gruß
    Chris



  • bool User::Accept (SOCKET s)
    {
        int size = sizeof (itsAddr);
    
        itsSock = socket (AF_INET, SOCK_STREAM, 0);
    
        if (itsSock == SOCKET_ERROR)
        {
            throw xBadSocket ();
            return false;
        }
    
        itsSock = accept (s, (sockaddr*) &itsAddr, &size);
    
        if (itsSock == SOCKET_ERROR)
        {
            throw xNoConnection ();
            Close ();
            return false;
        }
    
        WSAAsyncSelect (itsSock, hWnd, WM_SOCKET_NOTIFY, FD_READ | FD_CLOSE | FD_WRITE);
    
        return true;
    }
    

    denk scho



  • N00Bie one anmeldung schrieb:

    bool User::Accept (SOCKET s)
    {
        int size = sizeof (itsAddr);
    
        itsSock = socket (AF_INET, SOCK_STREAM, 0);
        
        if (itsSock == SOCKET_ERROR)
        {
            throw xBadSocket ();
            return false;
        }
        
        itsSock = accept (s, (sockaddr*) &itsAddr, &size);
        
        if (itsSock == SOCKET_ERROR)
        {
            throw xNoConnection ();
            Close ();
            return false;
        }
        
        WSAAsyncSelect (itsSock, hWnd, WM_SOCKET_NOTIFY, FD_READ | FD_CLOSE | FD_WRITE);
        
        return true;
    }
    

    denk scho

    Okay, wenn du "create" verwendest, musst Du danach nicht noch "bind" und "listen" verwenden? Sonst kommt garkeine Verbindung zustande... Denk ich doch mal. Ich würde sagen, nach "create" muss noch "bind" und "listen" her!

    Gruß
    Chris



  • Nein. Erstens verwende ich kein "create" und zweitens ist die Verbindung Teil einer Klasse. Die Funktion oben zeigt, wie die Klasse einen Socket geliefert bekommt, auf dem eine Verbindung auf Annahme wartet. Die Klasse nimmt diese Verbindung dann an.
    Willste die ganze Klasse oder gleich das ganze Projekt?



  • Ne lass mal. Also ich weiß da auch nicht mehr viel. Kommt eine Verbindung 100% sauber zu stande? Nur dann wird FD_WRITE auch aufgerufen werden...



  • ja, wenn ich nicht auf FD_WRITE sende, sondern einfach wanns mir passt, dann kriegt der empfänger ein FD_READ und kann die gesendeten daten empfangen.



  • kann man eigentlich von sich aus ne FD_WRITE message an den mit einem Verbundenen schicken?



  • Ich würde sagen: NEIN. Insofern ich dich grad verstehe.
    Wie siehts mit Deinem Problem aus, nicht hinbekommen?



  • einfach FD_WRITE außer Acht gelassen und nun funzts 🙂
    trotzdem danke


Anmelden zum Antworten