ServerSocket: Port immer belegt!



  • Moin!
    Ich möchte einen Socket öffnen und den auf einem freien Port "anmelden", aber es heißt immer, dass der Port belegt sei bzw. ich bekomme eine Fehlermeldung!

    [...]
    addr.sin_addr.s_addr = INADDR_ANY; // fuer jede ip erreichbar
    	addr.sin_family = AF_INET;
    	addr.sin_port = htons(42000);
    
    	if(socket_srv = socket(AF_INET, SOCK_STREAM, 0) != -1)
    			printf("Socket wurde angelegt\n");
    
    	setsockopt(socket_srv, SOL_SOCKET, SO_REUSEADDR, &y, sizeof(int));
    
    	if(bind(socket_srv,(struct sockaddr*)&addr, sizeof(addr)) == 0)
    		printf("Server Socket gebunden\n");
    	else{
    		printf("Port belegt\n");
    		exit(1);
    	}
    [...]
    

    Weiß jemand, welche Ports frei sind? Danke im vorraus!
    Ich habe Ubuntu 8.10, falls das hilft!

    Gruß
    Sdy



  • du solltest deine 6. Zeile so ändern:

    if(socket_srv = socket(AF_INET, SOCK_STREAM, 0) == -1)
        printf("Socket wurde angelegt\n");
    


  • Änder eher Zeile 15 in

    perror("Port belegt");
    

    damit man: errno ausgewertet wird und du erfährst was wirklich schief geht.

    @supertux
    ne, -1 signalisiert ja einen Fehler.



  • okay, dankeschön! werde ich gleich austesten...



  • #include <stdio.h>
    #include <sys/socket.h>
    #include <sys/types.h>
    #include <netinet/in.h> // sockaddr_in
    #include <string.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    int main(void){
    
    	int socket_srv, new_socket;
    	struct sockaddr_in addr;
    	const int y = 1;
    
    	socklen_t addrlen;
    
    	addr.sin_addr.s_addr = INADDR_ANY; // fuer jede ip erreichbar
    	addr.sin_family = AF_INET;
    	addr.sin_port = htons(42000);
    
    	if(socket_srv = socket(AF_INET, SOCK_STREAM, 0) != -1)
    			printf("Socket wurde angelegt\n");
    
    	setsockopt(socket_srv, SOL_SOCKET, SO_REUSEADDR, &y, sizeof(int));
    
    	if(bind(socket_srv,(struct sockaddr*)&addr, sizeof(addr)) == 0)
    		printf("Server Socket gebunden\n");
    	else{
    		perror("Port belegt\n");
    		exit(1);
    	}
    
    	listen(socket_srv, 5);
    	addrlen = sizeof(struct sockaddr_in);
    
    	while(1){
    		new_socket = accept(socket_srv, (struct sockaddr*)&addr, &addrlen);
    		if(new_socket != -1)
    			printf("Client ist verbunden\n");
    		sleep(5);
    
    		close(new_socket);
    	}
    
    	close(socket_srv);
    	return 0;
    }
    

    So mal den ganzen Quellcode, da es immer noch nicht funktioniert.

    Als errn liefert: : Socket operation on non-socket
    Ausgabe auf Serverseite (die Clientseite ist ja atm unwichtig):

    Socket wurde angelegt
    Port belegt
    : Socket operation on non-socket



  • uuuh...fehler beim "nochmal-drüber-schauen gefunden"!

    Hat sich erledigt 😃

    if(socket_srv = socket(AF_INET, SOCK_STREAM, 0) != -1)
    

    Klammerung vergessen...



  • rüdiger schrieb:

    @supertux
    ne, -1 signalisiert ja einen Fehler.

    Mist, den Text vom printf hat mich verwirrt und hab deswegen gedacht, dass das Program dort aussteigt, deshalb mein dummer Rat. *schähm*



  • das lag an der zeit...;)

    ich um 2°° und du um halb 3! kein wunder, dass dabei nur noch mist rauskommt 😉


Log in to reply