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


Anmelden zum Antworten