c - 为什么我的 getservbyname 函数总是返回 NULL?

标签 c linux sockets null linux-mint

现在我在使用 linux mint 中的 getservbyname() 函数时遇到了一些麻烦,每次我尝试获取端口时它都会返回 NULL 而我却不知道不知道会是什么

   extern struct servent *get_port(char *name, char *prot) {
      struct servent *tmp;
      tmp = getservbyname(name, prot);
      if(tmp == NULL) {
        return NULL;
      }
      return tmp;
    }

函数是这样调用的

    struct servent *port;

    if((port = (struct servent*)get_port("server", "tcp")) == NULL){
        perror("Error... \n");
        return -1;
    }
    printf("Got the port... \n");

我使用 perror 函数来获取有关该问题的更多信息,但每次我运行代码时,我都知道该函数工作正常...

最佳答案

getservbyname()不设置 errno , 所以 perror()不起作用。

如果返回NULL那么最可能的原因是你指定的服务在services文件中不存在,或者services文件打不开。

您示例中的名称 "server"不是通常包含在服务数据库中的服务 - 尝试查找类似 "ftp" 的服务.

关于c - 为什么我的 getservbyname 函数总是返回 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14516062/

相关文章:

c - 如何从 c 中的线程将当前目录中的所有文件添加到数组?

c - 读/写结构到套接字

php - 从 4 个相同的 Web 服务器中的 1 个运行 Cron 作业,所有这些服务器都具有相同的作业

linux - 读/写阻塞的系统调用是否会将进程置于 TASK_UNINTERRUPTIBLE 或 TASK_INTERRUPTIBLE 状态?

linux - 防止SIGPIPE

java - 服务器套接字总是向客户端返回空值,Java

java - 一种检测 http 响应结束的简单方法(原始套接字,java)?

c - 编译器未正确检查变量声明

c++ - HDF5 复合类型 Native 与 IEEE

c - 尝试声明字符串数组时c语言出错