0

コードをたどってパッシブソケットを理解しようとしています

http://merkez.ube.ege.edu.tr/~erciyes/ube528/passivesock.c

そして、次のコードが見つかりました

/* Map service name to port number */
if(pse = getservbyname(service, protocol)){
    sin.sin_port = htons(ntohs((u_short)pse->s_port) + portbase);
}
else if((sin.sin_port = htons((u_short)atoi(service))) == 0){
    errexit("can't get \"%s\" service entry\n", service);
}

についていくつか質問がありますhtons(ntohs((u_short)pse->s_port) + portbase);

ポートベースとは何ですか? コメントを見つけましたが、u_short portbase = 0; /* port base, for non-root servers */その意味はわかりますか?

「パッシブ ソケット ポートベース」でググってみましたが、役立つ情報が見つかりません。

事前にt​​hx。

4

1 に答える 1

1

1024 未満のポートはシステム ポートであり、アクセスするにはスーパーユーザー権限 (つまり root) が必要です[1]。そのため、このプログラムを root 以外のユーザーとして実行する場合、そのポート番号を 0 から始まる別の基数で開始するように再マップすることをお勧めします。たとえば、ポート 1024 で開始することにより、ポートはスーパーユーザー制限ゾーン (たとえば、既知のポート 80) にはなりません。 1104 になります)。これらをどこにでもマップすることを選択できます。

コメントは Give away:/* port base, for non-root servers */であり、この変数がそのファイルのどこにも設定されていないという事実と組み合わされています。それが読まれるだけです。したがって、この C ライブラリを使用する場合、ポートを再マップするために関数を呼び出す前にポート ベースを自由に設定できます。

于 2014-11-01T15:42:34.340 に答える