Fehler bei Struct-Übergabe bei Client-Server-Applikation

matt

Erfahrenes Mitglied
Hi Leute!

Ich hab ein Problem mit einem Funktionsaufruf. Und zwar möchte ich ein Struct an eine Funktion übergeben, damit diese mit den darin enthaltenen Daten andere Daten per UDP empfangen kann. Die Übergabe klappt aber nicht, und beim kompillieren mit dem gcc kommt folgender Fehler:

"warning: passing arg 3 of `recvUDPdata' from incompatible pointer type"

Ich bin nich wirklich ein Crack in (ANSI) C, habe deshalb diese Übergabe von anderen Funktionen (z.b. accept()) abgeleitet, da dort genau dasselbe Struct übergeben wird. Aber das scheint wohl falsch zu sein. Aber jede andere Möglichkeit ging auch schief. Komme jetzt nichtmehr weiter :(

Hoffe, jemand kann mir bei meinem Problem helfen, is wahrscheinlich wieder ein Logikfehler.

matt



Hier folgt mal der Funktionsaufruf und die Funktionsdeklaration:

==========================================================================
Funktionsaufruf:
Code:
int c, cli_size;
struct sockaddr_in cli;

[...]

cli_size = sizeof(cli);
c = accept(s, (struct sockaddr *)&cli, &cli_size);
if (c == -1) {
perror("Fehler in accept()");
return 5;
}

ret_recv = recvUDPdata(udpsocket, &message_in, (struct sockaddr *)&cli);

[...]
==========================================================================
Funktionsdeklaration:
Code:
int recvUDPdata(int socket, char **return_buffer, struct sockaddr *from) {
 
Zuletzt bearbeitet:
oh sorry... cli is vom typ "struct sockaddr_in". ich hab's oben im code mal korrigiert.

matt
 
recvUDPdata verlangt einen pointer auf die struktur also eine adresse.
Da aber cli kein pointer ist,sollte der aufruf so funktionieren:
recvUDPdata(udpsocket, &message_in, &cli);

Das casten kannst du dir sparen da laut definitionen die typen eh schon klar sind.

Falls cli als Pointer auf die struktur struct sockaddr definiert ist,sollte es mit dem Aufruf:
recvUDPdata(udpsocket, &message_in, cli); funktionieren
Post mal zurük wenns geklappt hat
MfG RedWing
 
hi!

cli ist von der deklaration her vom struct sockaddr_in, wird dann aber als sockaddr gecastet. die erklärung ist etwas ausführlicher, ist laut einem tuorial, das ich mal benutzt hatte, aber richtig (und funktioniert so auch, allerdings ohne den UDP-zusatz).

ansonsten funktionieren die beiden tipps leider nicht, es kommt dieselbe fehlermeldung.

matt
 
Dann schau dir doch einfach mal die Implementierung von accept() in den dazugehörigen sourcen an vielleicht hilft dir das ja weiter.

MfG RedWing
 
hi,

ich hab mir die funktionsdeklaration in den man-pages angeschaut und nach denen hab ich's auch nachgebildet. aber ohne erfolg, wie man sieht. deswegen erhoffte ich mir hier hilfe.

gruß,
matt
 
hab's gelöst! das problem war, dass ich die header-datei zu der funktion zu früh eingebunden habe und somit dort auch etwas nicht gefunden wurde. die fehlermeldung kam aber irgendwie nicht.

danke für deine hilfe,
matt
 
Zurück