Fehler 10022 WSAEINVAL bei sendto()
-
Hi ...
Ich hab ein kleines socket progg geschrieben dort will ich mit einem Raw socket..SOCKET create_socket(int timeout, bool RAW) { // Anfangen den socket einzustellen SOCKET sock; // Der socket int on = 1; // Wert 1 = an int st; // Der status sock = socket(AF_INET,SOCK_RAW,IPPROTO_TCP);// Socket erstellen if(sock == -1) { cout<<"Fehler socket konnte nicht erstellt werden......."<<endl; beende(); } if(RAW == true)// Raw Socket???? { st = setsockopt(sock ,IPPROTO_IP ,IP_HDRINCL ,(char*)&on ,sizeof(on) );// Stellen das man selber den Ip Header schreibt if(st == -1) { cout<<"IP_HDRINCL konnt nicht gesetzt werden setsockopt()"<<endl; beende(); } } if(timeout != NULL) // Recvtimeout einstellen wenn der wert gesetzt ist (wer es braucht) { st = setsockopt(sock,SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, sizeof(timeout)); if(st == -1) { cout<<"SO_RCVTIMEO konnte nicht gesetzt werden setsockopt()"<<endl; beende(); }// st }// Timeout // Socket Richtig eingestellt return sock; // Ihn zurück geben }// FertigMit Dem will ich dann über sendto daten senden der buffer enthält den ip Header und Tcp Header aber die funktion gibt immer den fehler 10022 zurück
int bytes_send = sendto(sock ,data ,datasize ,0 ,(SOCKADDR*)&destaddr ,sizeof(destaddr) ); if(bytes_send == -1) beende();Jetzt weiss ich nicht woran ich arbeiten soll um den fehler weg zu bekommen

Ich hoffe ihr könnt mir helfen
-
Der Fehler 10022 ist dieser:
WSAEINVAL (10022 )
Invalid argument.
Some invalid argument was supplied (for example, specifying an invalid level to the setsockopt function). In some instances, it also refers to the current state of the socket—for instance, calling accept on a socket that is not listening.Also wird wohl irgendein Argument falsch sein...
-
Ja Hab ich mir auchschon durchgelsen nur ich hab keine ahnung welches in der Definition von sendto() steht das es was mit flags zu tun hat
An unknown flag was specified, or MSG_OOB was specified for a socket with SO_OOBINLINE enabled.
aber ich kann nur einen flag mit der funktion mitgeben aber dort steht nicht wie ich ihn verändern sollte. Ich hab schon alles was ich gedacht habe woran das problem liegen könnt probiert deswegen frage ich ja jetzt auch hier im Forum nach.
Aber danke für die schnelle antwort
.
-
Ich glaub nich dass es am Flag (du hast ja auch keinen gesetzt) liegt.
Evtl. ist deine sockaddr/sockaddr_in Struktur falsch ausgefüllt oder data oder datasize sind kaputt oder so...
-
Ich hab den buffer überprüft und den die SOCKADDR structur auch aber es geht immer nochnicht ich komm einfach nicht weiter

-
Hmm, dann weiss ich auch nich weiter

-
ICh denke es könnt an den Headern Liegen also der IP Header ist von c-worker.ch 24 bytes gross
struct IP_HEADER { unsigned int h_len:4; // Länge des Headers unsigned int version:4; // IP Version unsigned char tos; // Type of service unsigned short total_len; // Gesamt länge des Pakets unsigned short ident; // unique identifier unsigned short frag_and_flags; // flags unsigned char ttl; // TTL unsigned char proto; // Protokoll (TCP, UDP etc) unsigned short checksum; // IP Checksumme unsigned int sourceIP; // Source IP unsigned int destIP; // Ziel IP };und der TCP HEader ist von mir vieleicht liegt da drinn der fehler er ist 36 bytes eigentlich viel zu gross
struct TCP_HEADER { unsigned short port_from; unsigned short port_dest; unsigned int seq_numb; unsigned int ack_numb; unsigned int offset:4; unsigned char reserviert:4; bool flag1; bool flag2; bool flag3; bool flag4; bool flag5; bool flag6; unsigned short bytesrecv; unsigned short pr_summe; unsigned short urg_pointer; unsigned int options ; };Ich könnte mir denken das drin der fehler liegt aber ich weiss es nicht hab ihn schon öfter verglichen vieleicht findet ja jemand fehler ...