Итак, я создал DNS-прокси на C. Я использую DIG в качестве клиентской программы;он отправляет пакет запроса на мой сервер, мой сервер пересылает его в DNS, и мой сервер получает ответы, а затем отправляет их обратно клиенту.
Мой сервер связан с сокетом UDP;Я передаю пакет DNS через TCP.Однако мой вызов recv () (из сокета TCP) всегда возвращает 0. Я получу исходный запрос обратно, но без ответов.
Код:
fromlen=sizeof(client);
recvfrom(UDPSock,buffer,sizeof(buffer),0,(struct sockaddr *)&client,&fromlen); //receive from client
int msglen=strlen(buffer);
connect(TCPSock,(struct sockaddr*) &dest, sizeof(dest)); //connect to DNS
int m=send(TCPSock,buffer,msglen,0); //send packet to dns
recv(TCPSock,buffer,sizeof(buffer),0); //this returns 0
//send back
sendto(UDPSock,buffer,sizeof(buffer),0,(struct sockaddr *)&client,fromlen); //send message back`
Буферсоставляет 300 байт.