2016-11-25 1 views
0

Ich versuche, c/C++ Socket-Programmierung zu lernen, aber die Bind-Funktion funktioniert ordnungsgemäß oder gibt nicht zurück, was es zurückgeben sollte, anstatt "int" seine Rückkehr "__bind" Ich weiß nicht, was falsch ist und ich habe was gesucht zu tun und nicht helfen, kommenDer Rückgabewert für bind ist kein int?

bitte

Server::Server() 
: sock_fd(0) 
{ 
    // number used as index in to the vector of client fd 
    num = 0; 
    clino.reserve(10); 
    clientfd.reserve(10); 
    if((sock_fd = socket(AF_INET,SOCK_STREAM,0)) < 0) 
    { 
     perror("Server constructor : cannot open socekt"); 
    } 
    bzero(&servaddr, sizeof(servaddr)); 
    servaddr.sin_family = AF_INET; 
    servaddr.sin_port = htons(TCP_PORT); 
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY); 
    //error returning __bind<int&, sockaddr*, unsigned long> 
    int b = bind(sock_fd,(sockaddr *)&servaddr, sizeof(servaddr)); 



    //this bind function is acting up, dosent want to let me check for errors lol 



    printf("printing..\n"); 
} 




int Server::waitforconnections() 
{ 

    printf("listening....\n"); 

    if(listen(sock_fd, 5) < 0) 
    { 
     perror("Server constructor : listen error"); 
    } 

    for(;;) 
    { 
     clino[num] = num + 1; 
     printf("accepting.. \n"); 
     clientfd[clino[num]] = accept(sock_fd, (sockaddr *)&cliaddr, clilen); 
     clisocktoaddr[clientfd[num]] = cliaddr; 
     if(clientfd[num] < 0) 
     { 
      perror("waitforconnections: accept error"); 
     } 
     //no client number 0 
      if(do_service() < 0) 
      { 
       perror("waitforconnections: cannot do service, !!FATAL ERROR!!"); 
       _exit(-1); 
      } 
     //if i am going to use kids then they must be some inter processing communication don't forget !! 


     num++; 
    } 




    return (0); 
} 
+1

'std :: bind' gibt ein Funktionsobjekt zurück, keinen Wert. Bitte lesen Sie die [Dokumente] (http://en.cppreference.com/w/cpp/utility/functional/bind). – Rakete1111

+0

Im Allgemeinen scheinen Sie mit C++ nicht vertraut zu sein. Zum Beispiel wäre 'bzero' nicht notwendig, wenn Sie das Mitglied als' sockaddr_in servaddr = {AF_INET, htons (TCP_PORT), {htonl (INADDR_ANY)}} ' – MSalters

+0

oh wirklich, ich tat das jetzt nicht, danke Sie so viel –

Antwort

5

Sie sind nicht die Funktion, die Sie denken, rufen Sie anrufen.

Anstatt bind anzurufen, rufen Sie std::bind an. Dies ist einer der Fallstricke, die passieren können, wenn Sie using namespace std; in Ihrem Code haben.

Sie haben hier zwei Möglichkeiten. Sie können den Socket bind mit dem Funktionsnamen ::bind aufrufen. Alternativ können Sie using namespace std; entfernen und ein beliebiges Objekt aus diesem Namespace mit std:: voranstellen. Letzteres kann mehr Änderungen in Ihrem Code bedeuten, aber es wird die Lesbarkeit erhöhen, da es klarer ist, was verwendet wird.

+0

Oder noch besser, entfernen Sie 'using namespace std;'. –

+0

vielen dank, das war es !! –

+0

@ p.ferife Ich bin froh, dass ich helfen konnte. Fühlen Sie sich frei, diese Antwort zu akzeptieren (http://stackoverflow.com/help/accepted-answer), wenn Sie es nützlich fanden. – dbush

Verwandte Themen