10045 Winsocks



  • Hi,

    also ich kriege gerade immer den fehler 10045 bei meinem recv und verzweifle langsam...

    #define MSG_WAITALL 0x8
    

    meine 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
    10045

    Operation 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.


Anmelden zum Antworten