UDP Problem! Kann nach recvfrom die addr nicht mehr verwenden
-
Guten Abend,
ich habe folgendes Problem:
Nach dem recvfrom:bytes = recvfrom(sd, buf, sizeof(buf), 0, (struct sockaddr*)&addr, &addr_len);speichere ich die addr wie folgt ab:
clients.push_back(addr);Eine Antwort funktioniert nur unmittelbar danach:
sendto(sd, buf, bytes, 0, (struct sockaddr*)&clients[i], sizeof(addr));Zu einem späteren Zeitpunkt kann ich nicht mehr an &clients[i] senden. Ich verstehe einfach nicht wieso.
Die Deklarationen sind wie folgt:vector<struct sockaddr_in> clients; struct sockaddr_in addr;Ich bin fuer jede Hilfe dankbar.
-
mhh sollte ein "struct sockaddr_in" nicht die Ziel IP Adresse repräsentieren? Wenn nein, wofür steht dieser Datentyp denn? Und weshalb hat er so eine kurze Laufzeit?
Ich komme einfach nicht weiter....
-
Welchen Fehler erhälst Du denn?
-
http fehler?
-
http? schrieb:
http fehler?
OMG OMG OMG OMG OMG OMG OMG OMG OMG OMG OMG OMG OMG OMG OMG OMG OMG OMG OMG OMG OMG OMG OMG OMG OMG OMG OMG OMG OMG OMG
-
Ich fände es schön, wenn mein Problem ernst behandelt wird.
Ich erhalte keinen Fehler, das senden zum "gespeicherten" Client kommt einfach nicht an.
-
D.h. sendto() gibt keinen Fehler zurück?
-
Was steht denn zu dem späteren Zeitpunkt in &clients[i] drin?
-
-
essteeu schrieb:
@Roger:
Doch, sendto gibt -1 zurück.http://msdn.microsoft.com/en-us/library/ms740148%28VS.85%29.aspx
dort steht: Return value is SOCKET_ERROR in case of an error... oder so ähnlich.wenn du dann noch das hier weist:
#define SOCKET_ERROR -1, weist du, dass was mit deinem Fkt-Aufruf nicht stimmt.Guck dir mal
WSAGetLastError()an, oder wie das genau heißt...bb
-
unskilled schrieb:
essteeu schrieb:
@Roger:
Doch, sendto gibt -1 zurück.http://msdn.microsoft.com/en-us/library/ms740148%28VS.85%29.aspx
dort steht: Return value is SOCKET_ERROR in case of an error... oder so ähnlich.wenn du dann noch das hier weist:
#define SOCKET_ERROR -1, weist du, dass was mit deinem Fkt-Aufruf nicht stimmt.Guck dir mal
WSAGetLastError()an, oder wie das genau heißt...bb
Ich verstehe deine Aussage nicht. Noch eine Zusatzinfo, das Programm läuft unter Linux.
-
dann gib mal in der konsole
man sendtoan und dort mal, was die über den return-wert schreiben.
ansonsten halte ich - auch unter linux - die-1für einen fehlercode...bb
-
-
essteeu schrieb:
[url] [...]
unskilled schrieb:
Guck dir mal
WSAGetLastError()an, oder wie das genau heißt...Ich verstehe deine Aussage nicht. Noch eine Zusatzinfo, das Programm läuft unter Linux.
#include <errno.h> int socketErrCode = errno();http://beej.us/guide/bgnet/output/html/multipage/errnoman.html
http://beej.us/guide/bgnet/output/html/multipage/perrorman.htmlThis is the variable that holds error information for a lot of system calls. If you'll recall, things like socket() and listen() return -1 on error, and they set the exact value of errno to let you know specifically which error occurred.
[...]
...you can call perror() or strerror() to get a human-readable version of the error
Viele Grüße
Roger Wilco
-
Guten Abend,
entschuldigt das ich diesen Thread hier wieder schreibe. Ich hatte in den letzten Tagen ziemlich viel zu tun.
Mittlerweile habe ich folgende Aussage durch den Debugger erhalten:clients[client] = (sockaddr_in &) @0x8133fc0: { sin_family = 2, sin_port = 16081, sin_addr = { s_addr = 201500864 }, sin_zero = "\000\000\000\000\000\000\000" }Ich bin für eure Hilfe dankbar
