diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/network/res_send.c | 10 | 
1 files changed, 9 insertions, 1 deletions
diff --git a/src/network/res_send.c b/src/network/res_send.c index ee4abf1f..9593164d 100644 --- a/src/network/res_send.c +++ b/src/network/res_send.c @@ -1,8 +1,16 @@  #include <resolv.h> +#include <string.h>  int __res_send(const unsigned char *msg, int msglen, unsigned char *answer, int anslen)  { -	int r = __res_msend(1, &msg, &msglen, &answer, &anslen, anslen); +	int r; +	if (anslen < 512) { +		unsigned char buf[512]; +		r = __res_send(msg, msglen, buf, sizeof buf); +		if (r >= 0) memcpy(answer, buf, r < anslen ? r : anslen); +		return r; +	} +	r = __res_msend(1, &msg, &msglen, &answer, &anslen, anslen);  	return r<0 || !anslen ? -1 : anslen;  }  | 
