Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » Sockets: listen() gibt immer 0

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
18.03.2008, 15:11 Uhr
~toti
Gast


Hi,

ich versuche mich grade en bischen am Netzwerkprogrammieren mit C++ unter Linux.
Ich habe dabei ein Socket angefordert. Das wird mir auch mit 3 zurück gegeben.
Dann habe ich ein bind gemacht und versucht das ganze per listen() aufn Lauschmodus zu kriegen.
Bei Listen liegt jedoch mein Problem. EIgendlich sollte man dbei ja nur bei einer erfolgreichen verbindung eine 0 zurück gegeben bekommen und der Prozess sollte an der Stelle ja warten bis eine Verbindung kommt. BEi mir bekomme ich aber auch ohne eine Verbindung eine 0 zurück, was ich mir nicht erklären kann. Ich ebnutze Kubuntu als OS und hab auch shcon mehrere Ports probiert.
Mein Code sieht folgendermaßen aus:


C++:
#include <iostream>
#include <stdio.h>
#include <errno.h>
#include <string>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <unistd.h>

using namespace std;

int main (void)
{
  int sockfd = socket (AF_INET, SOCK_STREAM, 0);
  if (sockfd == -1) {
    perror ("socket()");
    }
  cout << sockfd << endl;
  
  struct sockaddr_in {
    sa_family_t        sin_family; /* Address family                    */
    unsigned short int sin_port;   /* Port number                       */
    struct in_addr     sin_addr;   /* Internet address                  */
    unsigned char      pad[8];     /* Pad to size of ‘struct sockaddr’. */
    };

  sockaddr_in my_addr;
  my_addr.sin_family = AF_INET;
  my_addr.sin_port = htons(65000);
  my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
  if (bind(sockfd, (sockaddr *)&my_addr, sizeof(sockaddr)) == -1) {
    perror ("bind()");
  }

  cout << listen (sockfd, 5) << endl;

}



Irgendwelche Korrekturvorschläge, damit das ganze vielleicht klappt?
Würde mich über Antworten freuen.

Gruß toti
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.03.2008, 15:54 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ähm?


Zitat:

If no error occurs, listen returns zero.


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.03.2008, 17:02 Uhr
~toti
Gast


Hey,

ok, ich ahbs jetzt auch gemerkt. Vergessen wir das Kapitel. Ich hab zuvor irgendwo gelesen, dass durch den Listen befehl der ganze Programmverlauf angehalten wird bis eine Verbidnung aufgenommen wird. Das is wohl nich richtig und hat mich verwirrt.

Das ganz funktioniert jetzt auch bis zu dem Punkt, an dem ich etwas versenden möchte.

Auf der einen Seite möchte ich folgendermaßen eine kurze Nachricht verschicken:

C++:
  if (connect(sockfd, (sockaddr *) &serv_addr, sizeof(sockaddr)) == -1) {
    perror ("connect()");
  }

  char *msg = "test message";
  int len = strlen (msg);
  if (send (sockfd, msg, len, 0) == -1) {
    perror ("send()");
  }



Ich hab nur leider keine Ahnung wie ich das ganz per recv empfangen soll. Also ne warteschleife ob jetzt ne Nachricht rein kommt. Über noch en bischen Hilfe würd ich mich da nochmal freuen.

Gruß toti
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
18.03.2008, 19:16 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



C++:
  cout << listen (sockfd, 5) << endl;

  // hier dann z.b while(clientfd = accept(sockfd, ...) { recv(clientfd); close(clientfd); }
}



listen hält nicht an, accept wartet (ggf auf errno EINTR prüfen!)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: