1. ホーム
  2. c

[解決済み] ソケットプログラミング パーミッション拒否

2022-02-10 04:21:50

質問内容

以下のコードはTCPサーバプログラムで、クライアントに "HELLO!"を返すだけです。

80番ポートでサーバを起動すると、bind()が返されます。 Permission denied .

ポート12345はOKです。

このサーバープログラムで80番ポートを使用するにはどうすればよいですか?

#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;
}

解決方法は?

1024以下のポートは特権ポートとして扱われ、同じように特権を持つユーザでなければバインドすることができません。 ルート ).

1024を超えるものは誰でも自由に使うことができます。

OT:もうご存知かもしれませんが、例のポートはHTTPウェブサーバー用のものです。このポートをリッスンしているものは べきである HTTPも話せます。単純な "hello world" だけでは十分ではありません。)