probleme mit recvfrom...
-
hallihallo,
ich bin's mal wieder, und somit ein neues problemchen.
bei einem aufruf von recvfrom wird mir immer -1 zurueckgegeben. dabei wird errno auf 88 gesetzt, was soviel bedeutet wie "Socket operation on non-socket". hier mal mein code:#include <iostream> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <errno.h> using namespace std; int main( ) { int sock, recv_bytes; socklen_t fromlen; char buffer[ 60000 ]; struct sockaddr_in from; struct ip *ip; struct tcp *tcp; if( sock = socket( AF_INET, SOCK_RAW, IPPROTO_TCP) == -1 ) { cout << "err: socket( ) failed!" << endl; exit( -1 ); } while( 1 ) { fromlen = ( int ) sizeof( from ); if( ( recv_bytes = recvfrom( sock, buffer, sizeof( buffer )-1, 0, ( struct sockaddr * ) &from, &fromlen ) ) == -1 ) { cout << "err: recvfrom( ) failed!" << endl; cout << errno << endl; exit( -1 ); } cout << recv_bytes << " Bytes received" << endl << "Source Address: " << inet_ntop( AF_INET, &from.sin_addr, NULL, NULL ) << endl; } exit( 0 ); }
ich hoffe, jemand von euch weiss, wie man das hinkriegt.
bis dann,
cypoc
-
von wo soll deine recevfrom methode denn empfangen?
ip? port?
du musst die entsprechenden werte der von from setzen:memset( &from, 0, sizeof ( from ) ); from.sin_family = AF_INET; from.sin_port = htons( portNr ); from.sin_addr.s_addr = inet_addr( ipAddress );
-
ich dachte, das ganze wird von recvfrom "ausgefuellt"???
naja, ich werd's mal so probieren.auf jeden fall vielen dank fuer deine hilfe!
ciao
-
nein, daran liegt es nicht.
die situation ist unveraendert... ( waere ja auch bloed wenn man seinem sniffer sagt von wo die daten kommen)
ciao
-
Original erstellt von cypoc:
if( sock = socket( AF_INET, SOCK_RAW, IPPROTO_TCP) == -1 )
Du vergleichst den Rückgabewert von socket() mit -1 und weist das Ergebnis des Vergleichs sock zu. Der Vergleich wird meistens false ergeben, somit ist sock == 0, also rufst Du recvfrom() auf die Standardeingabe auf und bekommst völlig zu Recht den Fehler, dass das kein socket ist.
-
Hi
Bei TCP muss man doch recv nehmen, recvfrom ist für UDP.
-
@Gast: das war's! ich dummkopf hab schon nach sowas gesucht, doch leider nicht da oben...
jetzt klappt's wie gewuenscht, vielen vielen dank!
ciao, cypoc