我目前正在将客户端/服务器应用程序的服务器部分从 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
出于安全原因,我希望端口映射器始终使用定义的端口(我的应用程序是机器上唯一的),但我不知道如何做到这一点。有谁能够帮我?