1

我目前正在将客户端/服务器应用程序的服务器部分从 OpenVMS 迁移到 Linux (RHEL)。通信是通过 RPC 完成的。我现在看到端口映射器将分配的端口“扩展”在整个范围内,而不是一个接一个地分配(就像在 OpenVMS 中所做的那样)。

我通过以下代码(GNU-C)分配端口:

(void)pmap_unset(server_nr, KOMVERS) ;
transp = svctcp_create(RPC_ANYSOCK, 0, 0) ;
if (transp == NULL)
{
    fprintf(stderr, "cannot create tcp service.\n") ;
    exit(EXIT_FAILURE) ;
}
if (!svc_register(transp, server_nr, KOMVERS, komprog_1, IPPROTO_TCP))
{
    fprintf(stderr, "unable to register (%ld, tcp).\n",server_nr) ;
    exit(EXIT_FAILURE) ;
}

server_nr 是客户端用来访问服务器的服务器程序的编号(从 800000000 开始)。启动几个服务器进程后,我得到

... 使用 rpcinfo

800000101   1   tcp    0.0.0.0.250.211     - unknown
800000102   1   tcp    0.0.0.0.250.211     - unknown

...使用网络统计

Proto Recv-Q Send-Q Local Address   Foreign Adress State   PID/Program
tcp   0      0      0.0.0.0:52414   0.0.0.0:*      LISTEN  1604/Server01
tcp   0      0      0.0.0.0:25600   0.0.0.0:*      LISTEN  1606/Server02

出于安全原因,我希望端口映射器始终使用定义的端口(我的应用程序是机器上唯一的),但我不知道如何做到这一点。有谁能够帮我?

4

0 回答 0