sockets

gripmaster

Well-Known Member
hallo zusammen:

Ich habe hier mal einen kleinen Beispiel-Server.
Er soll auf Port 8080 lauschen und einen Text ausgeben, wenn sich ein Client
verbunden hat.

Problem: Die accept-Funktion wird aufgerufen, Port 8080 ist aber laut "netstat -a" nicht offen. Auch ein telnet localhost 8080 geht nicht.

Ich finde den Fehler einfach nicht! Jemand aus dem IRC hat mir gesagt, dass der code bei ihm laufen würde ! :-/

Code:
#include <iostream>
#include <sys/socket.h>
#include <arpa/inet.h> //htonl
#include <netinet/in.h>

using namespace std;

int main(int argc, char **argv)
{
	int mySocket = -1;
	int curSocket = -1;
	struct sockaddr_in MyAd;
	struct sockaddr remoteAd;
	
	/*
		TCP Socket erzeugen
		AF_INET = IPv4
		SOCK_STREAM = Stream socket -> TCP
	*/
	mySocket = socket(AF_INET,SOCK_STREAM,0);

	/*
	            AF_INET = IPv4
		Port: 8080
		INADDR_ANY = jedes Interface 
	*/
	memset(&MyAd,0,sizeof(MyAd));
	MyAd.sin_family = AF_INET;
	MyAd.sin_port = 8080;
	MyAd.sin_addr.s_addr = htonl(INADDR_ANY);

	//socket binden
	int ret = bind(mySocket,(struct sockaddr *)&MyAd,sizeof(MyAd));
	if(ret == -1)
	{
		cout << "bind error" << endl;
		perror("bind");
		return -1;	
	}

	//listen
	if(listen(mySocket,3) == -1)
	{
		cout << "listen error" << endl;
		perror("listen");
		return -1;	
	}

	/*
		What do i wrong ??
		accept doesn't return, but i can't telnet
		to localhost 8080 and netstat -a doesn't 
		show an open port ?!
	*/	

	socklen_t l = sizeof(remoteAd);
	curSocket = accept(mySocket,(struct sockaddr*)&remoteAd,&l);
	if(curSocket == -1)
	{
		cout << "accpet error" << endl; 
		perror("accept");
		return -1;	
	}
	else
	{
		cout << "a client has been connected" << endl;
	}

	return 0;
}

sysctl asgt mir:
Code:
net.inet.ip.portrange.lowfirst: 1023
net.inet.ip.portrange.lowlast: 600
net.inet.ip.portrange.first: 49152
net.inet.ip.portrange.last: 65535
net.inet.ip.portrange.hifirst: 49152
net.inet.ip.portrange.hilast: 65535
net.inet.ip.portrange.reservedhigh: 1023
net.inet.ip.portrange.reservedlow: 0
net.inet.ip.portrange.randomized: 1
net.inet.ip.portrange.randomcps: 10
net.inet.ip.portrange.randomtime: 45

Kann das was mit diesen Einstellungen zu tun haben, oder bin ich auf dem Holzweg und es liegt an etwas ganz Anderem ?!
Steh echt aufm Schlauch! ;-)

Hat jemand vielleicht einen Tipp ?

gruß,
gripmaster
 
Zurück
Oben