Linux socketprogrammierung- listen() funktioniert nicht

cesupa

Erfahrenes Mitglied
Hi,

ich versuch grad etwas socketprogrammierung unter Linux und bleib beim Server hängen. Wenn mein server listen() ausführen soll, dann macht er das wartet aber nicht auf eine Verbindungsanfrage sondern macht gleich mit dem nächsten code weiter.
Warum macht er das? Normalerweise müsste listen() solange laufen bis eine Verbindungsanfrage gesendet wird.

Sourcecode server:


#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <unistd.h>
#include <iostream>

using namespace std;

int main()
{
int c,port;
sockaddr_in addr;

cout<<"Geben sie den Port an: ";
cin>>port;

c=socket(AF_INET,SOCK_STREAM,0);
if(c==-1)
{
cout<<"ERROR: socket()"<<endl;
}
else
{
cout<<"Socket erstellt"<<endl;
}

addr.sin_family=AF_INET;
addr.sin_port=htons(port);
addr.sin_addr.s_addr=htonl(INADDR_ANY);

if(bind(c,(sockaddr*)&addr,sizeof(sockaddr))==-1)
{
cout<<"ERROR: bind()"<<endl;
}
else
{
cout<<"An Port "<<port<<" gebunden."<<endl;
}

if(listen(c,3)==-1)
{
cout<<"ERROR: listen()"<<endl;
}
else
{
cout<<"listen() wird ausgeführt!"<<endl;
}

int c2;
socklen_t sinsize=sizeof(sockaddr_in);
c2=accept(c2,(sockaddr*)&addr,&sinsize);
if(c2==-1)
{
cout<<"ERROR accept()"<<endl;
}
else
{
cout<<"accept() angenommen"<<endl;
}

cin.get();
return 0;
}


Ich bezweifle aber das es am code liegt, vielleicht hab ich ja was übersehen.

Danke schon mal für eure Hilfe.

MfG
cesupa
 
Code:
DESCRIPTION
       To accept connections, a socket is first created with socket(2), a willingness to accept incoming connections and
       a queue limit for incoming connections are specified with listen, and then  the  connections  are  accepted  with
       accept(2).  The listen call applies only to sockets of type SOCK_STREAM or SOCK_SEQPACKET.

So wie ich das verstanden habe bereitet listen() den Socket nur vor Verbindungen zu akzeptieren,
und eine maximale Verbindungsanzahl zu spezifizieren...
Es wartet nicht auf eine eingehende Verbindung, dafür ist accept dann zuständig...
Hoffe das beantwortet deine Frage...

Gruß

RedWing
 
Zurück