[Winsock] - Prob mit connect()



  • Also ich habe folgenden Code:

    // function to connect to server
    int ConnectToServer(char *szServerHost, int iPort, char *szNickname, COLORREF clrUser)
    {
        // private
        WSADATA                 wsa;
        char                    szIP[16];
        SOCKADDR_IN             addr;
    
        // setup winsock
        if(WSAStartup(MAKEWORD(2, 2), &wsa)==-1)
            return -1;
    
        // create the socket
        if((cli = socket(AF_INET, SOCK_STREAM, 0))==-1)
            return -1;
    
        // setup for messages
        /*if(WSAAsyncSelect(cli, hSockWnd, LUNATIC_SOCKEVENT, FD_CLOSE | FD_READ | FD_CONNECT)==-1)
            return -1;*/
    
        // resolve host ip
        if(!Host2IP(szServerHost, szIP))
            return -2;
    
        // fill addr struct
        addr.sin_addr.S_un.S_addr   = inet_addr(szIP);
        addr.sin_port               = htons(PORT);
        addr.sin_family             = AF_INET;
    
        // connect to server
        if(connect(cli, (sockaddr*)&addr, sizeof(addr)) == -1)
            return -3;
    
        MessageBox(0, "HALLO", 0, 0);
    
        // ok, we are connected
        // success
        return 0;
    }
    

    Der Server läuft und die MessageBox wird angezeigt. Tu ich aber jetzt das WSAAsyncSelect wieder rein, dann ist connect(...) immer -1. Woran liegt das?

    danke!
    ciao para
    😃



  • ganz einfach:

    im asynch modus kannst du den return value nicht abfragen, da diese funktion sofort zurückkehrt - im background wird da quasi ein "connect-thread" getriggert.

    du bekommst aber auf jeden fall ein FD_CONNECT event, egal ob erfolgreich oder nicht - der return-wert steckt dann in LPARAM

    WORD wError = WSAGETSELECTERROR(lParam); 
    // wError=0 -> alles klar ; wError<>0 -> failed
    

    RockNix ///

    [ Dieser Beitrag wurde am 25.04.2003 um 09:29 Uhr von RockNix editiert. ]



  • Morgähn,

    Ja danke, so hab ichs mir irgentwie schon gedacht, nur ist das sehr unpraktisch für meine Funktion, denn ich rufe sie auf und wenn sie erfolgreich war dann wird ein anderer Dialog angezeigt, ansonsten eine Fehlermeldung.

    Naja, muss ich mich irgentwie andersweitig bedienen...

    ciao para
    😃


Anmelden zum Antworten