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);

什么是portbase,我找到了评论u_short portbase = 0; /* port base, for non-root servers */但仍然知道它的含义?

我已经通过“被动套接字端口库”搜索了它,但找不到有用的信息。

提前谢谢。

4

1 回答 1

1

低于 1024 的端口是系统端口,需要超级用户权限才能访问(即 root)[1]。因此,当以非 root 用户身份运行此程序时,您可能希望重新映射该端口号以从 0 开始从不同的基数开始。例如,从端口 1024 开始,超级用户限制区域中将没有端口(例如我们众所周知的端口 80现在将是 1104)。您可以选择将这些映射到任何地方。

评论是赠品:/* port base, for non-root servers */,结合这个变量永远不会在该文件中的任何位置设置的事实。只有它永远被阅读。因此,当使用这个 C 库时,您可以在调用任何函数之前自由设置端口基数以重新映射端口。

于 2014-11-01T15:42:34.340 回答