UDP-Socket lässt sich nicht erzeugen



  • Hi,

    ich versuche einen Socket zu erzeugen, mit dem ich UDP-Broadcast-Messages empfangen will:

    data->sockfd = socket(AF_INET, SOCK_DGRAM,IPPROTO_UDP);
    if (data->sockfd==INVALID_SOCKET)
    {
       long l=WSAGetLastError();
       data->m_initialised=OAPC_ERROR_RESOURCE;
       return NULL;
    }
    my_addr.sin_family = AF_INET;     // host byte order
    my_addr.sin_addr.s_addr = INADDR_ANY; // automatically fill with my IP
    my_addr.sin_port = htons(MYPORT);    // short, network byte order
    memset(&(my_addr.sin_zero), '\0', 8); // zero the rest of the struct
    

    Der Teil Funktioniert, in data->sockfd steht anschließend -24 (OK, ich hätte einen positiven Wert erwartet aber es ist nicht INVALID_SOCKET).

    if (bind(data->sockfd, (struct sockaddr *)&my_addr,sizeof(struct sockaddr)) == -1)
    {
       long l=WSAGetLastError();
       data->m_initialised=OAPC_ERROR_RESOURCE;
       return NULL;
    }
    

    Hier geht es dann schief, bind() schlägt mit einem Fehlercode 10038 fehl. Laut MSDN heißt dass, es wurde eine Operation auf etwas ausgeführt, was kein Socket ist.

    Was geht denn da schief?

    Das WSA-Init-Gedöns ist vorher gelaufen, auch wäre in dem Fall der Fehlercode ein anderer...



  • ISt sockfd vom Typ SOCKET?



  • Du musst sizeof(sockaddr_in) übergeben, damit bind weiß, wie groß die tatsächliche Struktur ist. Die Größe von sockaddr kennt es selbst 😉


Anmelden zum Antworten