Enviar confirmação de mensagem ao SEND UDP

Boa tarde, tenho o código para UDPListen, que faz com que o PC1 envie uma mensagem até ao PC3 através de um interlocutor(PC2) , contudo, depois da mensagem chegar ao PC3, este tem de enviar ao PC1 a confirmar que recebeu a mensagem, contudo não estou a perceber como fazer essa parte. Aqui está o código do UDPListen

#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <string.h> /*  Aguarda por datagramas UDP no porto especificado  Digitar <Ctl><c> para abandonar  */ #define exit_on_error(s,m) if (s < 0) { perror(m); exit(1); } #define MAX_BUFFER 512  int main(int argc, char* argv[]){  int sockfd, size_addr;  struct sockaddr_in remote_addr;  struct sockaddr_in local_addr;  char ip_s[INET_ADDRSTRLEN]; //IP em dotted decimal notation  int bytes,r,v=1;  char buf[MAX_BUFFER];   //verifica argumentos  if (argc != 2) {   printf("USAGE: %s <porto>\n",argv[0]);   exit(1);}    for(i=0; i < strlen(agrv[1]); i++) //IP argv[1]   {    if(!isdigit(argv[1][i])) //IP argv[1]    {        printf("<porto> -> Apenas numeros inteiros!\n\n\n");        exit(1);    }   }   //cria socket UDP  sockfd = socket(AF_INET,SOCK_DGRAM,0);  exit_on_error(sockfd,"Error:socket()");  //permite broadcast  r=setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &v, sizeof(v));  exit_on_error(r,"Error:setsockopt()");   //regista (associa) socket localmente (IP+porto)  //necessarias permissões de root  bzero((char *)&local_addr, sizeof(local_addr));//Coloca a zero toda a estrutura  local_addr.sin_family = AF_INET;  local_addr.sin_addr.s_addr = htonl(INADDR_ANY); //IP Local  local_addr.sin_port = htons(atoi(argv[1])); //Porto  r=bind(sockfd, (struct sockaddr *)&local_addr, sizeof(local_addr));  exit_on_error(r,"Error:bind()");   //limpa var remote_addr  bzero((char *)&remote_addr, sizeof(remote_addr));   // aguarda por datagrama UDP  while (1){   printf("Aguarda UDP no porto %d\n",atoi(argv[1]));    size_addr=sizeof(remote_addr);   bytes = recvfrom(sockfd, buf, MAX_BUFFER-1, 0, (struct sockaddr *)&remote_addr, &size_addr);   // escreve origem e dados recebidos   inet_ntop(AF_INET,&(remote_addr.sin_addr),ip_s, sizeof ip_s);   printf("Recebido de: %s\n",ip_s);   printf("Porto: %d\n",ntohs(remote_addr.sin_port));   printf("Bytes lidos: %d\n", bytes);   buf[bytes]=0; //Null terminated string   printf("Dados: %s\n", buf);  }  //fecha socket  close(sockfd); } 

Também tenho o UDPSend e o UDPbw se for necessário colocar aqui. Alguém me pode ajudar?