Index: ares-1.1.1/ares_private.h =================================================================== --- ares-1.1.1.orig/ares_private.h 2015-11-25 14:53:29.272441538 +0800 +++ ares-1.1.1/ares_private.h 2015-11-25 14:53:29.432521543 +0800 @@ -115,6 +115,9 @@ /* Active queries */ struct query *queries; + + /*ZyXEL To support Multi-interface*/ + unsigned int ifMark; //interface Mark }; void ares__send_query(ares_channel channel, struct query *query, time_t now); Index: ares-1.1.1/ares_process.c =================================================================== --- ares-1.1.1.orig/ares_process.c 2015-11-25 14:53:29.272441538 +0800 +++ ares-1.1.1/ares_process.c 2015-11-25 14:53:29.432521543 +0800 @@ -453,6 +453,12 @@ close(s); return -1; } + /*ZyXEL Multi-interface*/ + //printf("Ares IfMark:%x\n", channel->ifMark); + if(setsockopt(s, SOL_SOCKET, SO_MARK, &channel->ifMark, sizeof(channel->ifMark)) == -1) + { + printf("<> Ares setsockopt failed!\n"); + } /* Connect to the server. */ memset(&sin, 0, sizeof(sin)); @@ -480,6 +486,13 @@ if (s == -1) return -1; + /*ZyXEL Multi-interface*/ + //printf("Ares IfMark:%x\n", channel->ifMark); + if(setsockopt(s, SOL_SOCKET, SO_MARK, &channel->ifMark, sizeof(channel->ifMark)) == -1) + { + printf("<> Ares setsockopt failed!\n"); + } + /* Connect to the server. */ memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET;