10045 Winsocks
-
Hi,
also ich kriege gerade immer den fehler 10045 bei meinem recv und verzweifle langsam...
#define MSG_WAITALL 0x8meine funktion zum empfangen
WinSock * Sock = (WinSock *)lParam; ByteBuffer Buffer; ZeroMemory(&Buffer,sizeof(ByteBuffer)); MyList * List = Sock->List; SOCKET * ClientS = ((SOCKET *)(List->Object)); while (Sock->getState()){ if ( recv(*ClientS,Buffer.getBaseAdress(),BUFFER_SIZE,MSG_WAITALL) == SOCKET_ERROR ){ printf( "ERROR in recv(..) : %d\n", WSAGetLastError()); }else{ Sock->MessageHandler->ProcessMessage(Buffer.getBaseAdress(),true); } } return 1;meine funktion zum verbinden
SOCKET * Client = new SOCKET; *Client = accept(AcceptSocket,NULL,NULL); if ( *Client == INVALID_SOCKET ){ printf("ERROR: Accept() : %d\n",WSAGetLastError()); delete Client; return 0; }else{ sockaddr_in Addr; int len = sizeof Addr; if ( getpeername(*Client, (sockaddr*)&Addr, &len) != 0 ){ printf("Cannot Recieve the Peer Name, ERROR: %d\n",WSAGetLastError()); } DWORD Dump; MyList * List = Sock->List->GetLast(); printf("Neue Verbindung akzeptiert. IP: %s PORT: %d\n", inet_ntoa(Addr.sin_addr), ntohs(Addr.sin_port) ); List->Object = (PVOID)Client; HANDLE * hThread = new HANDLE; *hThread = CreateThread( NULL, NULL, RecieveThread, (PVOID)Sock, NULL, &Dump ); List->hObject = (PVOID)hThread; Sock->List->Add(); return 1; }der client ist nen ganz einfacher...
WORD Version = MAKEWORD(2,0); // Version 2.0 WSADATA wsa; // Wird mit den Daten des installierten Winsocks gefüllt. ZeroMemory(&wsa,sizeof(WSADATA)); // Initialisieren if ( !(!WSAStartup(MAKEWORD(2,0),&wsa)) ){ // Startet Winsocks :D printf("ERROR: Couldnt intialize WinSocks 2.0\n"); printf("Closing...\n"); return 0; } printf("WinSocks Gestartet !!!\n"); // Sockets. SOCKET s; ZeroMemory(&s,sizeof(SOCKET)); s = socket(AF_INET,SOCK_STREAM,0); if ( s == INVALID_SOCKET ){ printf("ERROR: SOCKET: %d\n", WSAGetLastError()); printf("Closing...\n"); return 1; }else{ printf("Socket Erstellt.\n"); } printf("Verbinde...\n"); SOCKADDR_IN si; ZeroMemory(&si,sizeof(SOCKADDR_IN)); si.sin_family = AF_INET; si.sin_port = htons(SERVER_PORT); si.sin_addr.s_addr=inet_addr("127.0.0.1"); // zielrechner ist unser eigener if ( connect(s, (SOCKADDR*)&si,sizeof(SOCKADDR)) == SOCKET_ERROR ){ printf("ERROR: Connect: %d\n",WSAGetLastError()); printf("Closing...\n"); return 1; }else{ printf("Verbunden mit 127.0.0.1\n"); }
-
Dieser Thread wurde von Moderator/in Phoemuex 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.
-
WSAEOPNOTSUPP
10045Operation not supported.
The attempted operation is not supported for the type of object referenced. Usually this occurs when a socket descriptor to a socket that cannot support this operation is trying to accept a connection on a datagram socket.
versuchs mal ohne MSG_WAITALL
-
Geht <.< ist das ürgentwie anders möglich zu relisieren das er ganze datenpackete empfängt und nicht bei ner 0 sagt "des isch fertig"?
-
benutz mal bisschen die SuFu, da findeste fertige lösungen, damit du alles empfängst.