为什么 netstat 显示我的套接字教程程序具有“x11-1”端口,而不是我在代码中设置的端口?

为什么 netstat 显示我的套接字教程程序具有“x11-1”端口,而不是我在代码中设置的端口?

我正在尝试学习套接字编程,并且我有以下函数来设置套接字:

  29 int CreatePassiveSock(char *protocol, char *portstr, int qlen) {                         
  30   int s, port, type, saddrlen;                                                           
  31   char *endptr;                                                                          
  32   struct sockaddr_in saddr;                                                              
  33   port = (int) strtol(portstr, &endptr, 10);                                             
  34   if (*endptr) {                                                                         
  35     printf("\nPlease specify a positive integer for port\n");                            
  36     exit(1);                                                                             
  37   }                                                                                      
  38   saddrlen = sizeof(saddr);                                                              
  39   memset(&saddr, 0, saddrlen);                                                           
  40   saddr.sin_family = AF_INET;                                                            
  41   saddr.sin_addr.s_addr = INADDR_ANY;                                                    
  42   saddr.sin_port = htons(port);                                                          
  43   if (strcmp("tcp", protocol) == 0)                                                      
  44     type = SOCK_STREAM;                                                                  
  45   else if (strcmp("udp", protocol) == 0)                                                 
  46     type = SOCK_DGRAM;                                                                   
  47   else {                                                                                 
  48     printf("Unsupported protocol given");                                                
  49     exit(1);                                                                             
  50   }                                                                                      
  51   if ((s = socket(PF_INET, type, 0)) == -1){                                             
  52     perror("socket call failed");                                                        
  53     exit(1);                                                                             
  54   }                                                                                      
  55   if (bind(s, (struct sockaddr *)&saddr, saddrlen) == -1) {                              
  56     perror("Bind failed");                                                               
  57     exit(1);                                                                             
  58   }                                                                                      
  59   if (type == SOCK_STREAM) {                                                             
  60     if (listen(s, qlen) == -1) {                                                         
  61       perror("listen failed");                                                           
  62       exit(1);                                                                           
  63     }                                                                                    
  64   }                                                                                      
  65   return s;                                                                              
  66 }          

当我使用 6001 作为端口号调用它时,这是显示的行netstat -a | head

tcp        0      0 0.0.0.0:x11-1           0.0.0.0:*               LISTEN 

为什么会显示为 0.0.0.0:x11-1?我不应该得到 0.0.0.0:6001 吗?

如果重要的话,我会在运行 PopOS 的笔记本电脑上执行此操作。

答案1

TCP 端口 6001 被标识为x11-1/etc/services因此netstat使用该标签显示它:以与查找与其找到的 IP 地址对应的主机名的方式类似的方式,它查找与其找到的端口号对应的服务名称。看man 5 services有关其描述/etc/services以及用于访问它的函数,X 客户端如何知道它们需要连接到 TCP 端口 6000+<显示编号>?有关 6000+ 范围端口号映射的说明。

您可以检查/etc/services您的系统上有哪些服务是已知的;官方注册表由 IANA 维护,你可以找到X11 作业也在那里

您可以netstat使用强制显示端口号-n

相关内容