Socket-Programmierung Permission denied
Folgenden code TCP-server-Programm senden Sie einfach zurück "HALLO!!" client.
Wenn ich server mit dem port 80, bind() zurückgegeben wird Permission denied
.
Port 12345 ist OK.
Wie kann ich den port 80 für das server-Programm ist?
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int
main(){
int sock0;
struct sockaddr_in addr;
struct sockaddr_in client;
int len;
int sock;
char *message;
message = "HELLO !!";
sock0 = socket(AF_INET,SOCK_STREAM,0);
addr.sin_family = AF_INET;
addr.sin_port = htons(80);
inet_pton(AF_INET,"127.0.0.1",&addr,sizeof(addr));
bind(sock0,(struct sockaddr *)&addr,sizeof(addr));
perror("bind");
len = sizeof(client);
sock = accept(sock0,(struct sockaddr *)&client,&len);
perror("accept");
write(sock,message,sizeof(message));
perror("write");
close(sock);
return 0;
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ports unter 1024 werden als "privilegiert" und kann nur verbunden werden mit einem ebenso privilegierten Benutzer (Lesen: root).
Alles über und einschließlich 1024 ist "free to use" von jedermann.
OT: Sie wissen vielleicht schon, aber den port in deinem Beispiel ist, dass für die HTTP-web-Server. Nichts hören von diesem port sollte sprechen HTTP, auch. Ein einfaches "hello world" reicht nicht. 😉
Nur der Benutzer root erlaubt ist, zu binden, zu ports <= 1024. Alle ports > 1024 gebunden werden kann, um von normalen Benutzern.
Führe dein Programm als root oder mit
sudo
.müssen Sie das ausführen der Anwendung mit Superuser-Konto (root)
Führen Sie Ihre Anwendung mit
sudo
Befehl