C-Ares回调不会从查询中收到arg

时间:2015-11-17 05:23:05

标签: c callback c-ares

我正在使用c-ares库对存储在文件中的一组域执行dns查找。这样的事情。

char *line = NULL; 
while ((read = getline(&line, &len, fp)) != -1) {
        if (line && line[strlen(line)-1]=='\n') line[strlen(line)-1]=0;
        printf("Sending %s\n", line);
        ares_query(channel, line, ns_c_in, ns_t_mx, callback, line);
    }  

ares_query函数的最后一个参数是void * arg类型,它只是传递回回调函数。详情 -

typedef void (*ares_callback)(void *arg, int status, int timeouts, unsigned char *abuf, int alen)

void ares_query(ares_channel channel, const char *name, int dnsclass, int type, ares_callback callback, void *arg)

上面的ares_query调用似乎没有传递“line”,我在回调中收到一个NULL变量。但是,当我用这样的文字调用它时,它似乎通过了arg。

ares_query(channel, line, ns_c_in, ns_t_mx, callback, "HELLO");

这两种方法有什么区别?为什么第一种方法不起作用?

2 个答案:

答案 0 :(得分:0)

我认为你应该为传递给void指针的变量分配内存:

char *line;
line = malloc(stringLength*sizeof(char));

答案 1 :(得分:0)

我实际上将内存分配给一个新变量,将字符串的内容复制到该变量中并将其传递给它,它现在似乎正常工作。

arg = (char*) malloc(strlen(line) * sizeof(char));
strcpy(arg, line);
ares_query(channel, line, ns_c_in, ns_t_mx, callback, arg);