[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