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