我正在使用 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");
这两种方法有什么区别?为什么第一种方法不起作用?