From 300e1916c36536ceabbb8c395777fd1ea7601333 Mon Sep 17 00:00:00 2001 From: yrutschle Date: Sun, 16 May 2021 15:08:33 +0200 Subject: [PATCH] add recv and sendto addresses --- echosrv.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/echosrv.c b/echosrv.c index f61e1f2..9f83d70 100644 --- a/echosrv.c +++ b/echosrv.c @@ -110,12 +110,32 @@ void tcp_echo(struct listen_endpoint* listen_socket) } } +void print_udp_xchange(int sockfd, struct sockaddr* addr, socklen_t addrlen) +{ + struct addrinfo src_addrinfo, to_addrinfo; + char str_addr[NI_MAXHOST+1+NI_MAXSERV+1]; + char str_addr2[NI_MAXHOST+1+NI_MAXSERV+1]; + struct sockaddr_storage ss; + + src_addrinfo.ai_addr = (struct sockaddr*)&ss; + src_addrinfo.ai_addrlen = sizeof(ss); + getsockname(sockfd, src_addrinfo.ai_addr, &src_addrinfo.ai_addrlen); + + to_addrinfo.ai_addr = addr; + to_addrinfo.ai_addrlen = sizeof(*addr); + + fprintf(stderr, "UDP local %s remote %s\n", + sprintaddr(str_addr, sizeof(str_addr), &src_addrinfo), + sprintaddr(str_addr2, sizeof(str_addr2), &to_addrinfo) + ); +} + /* UDP echo server: receive packets, return them, forever. * Prefix is added at each packet */ void udp_echo(struct listen_endpoint* listen_socket) { char data[65536]; - struct sockaddr src_addr; + struct sockaddr src_addr, sock_name; socklen_t addrlen; memset(data, 0, sizeof(data)); @@ -135,6 +155,10 @@ void udp_echo(struct listen_endpoint* listen_socket) if (len < 0) { perror("recvfrom"); } + *(data + prefix_len + len) = 0; + fprintf(stderr, "%ld: %s\n", len, data + prefix_len); + + print_udp_xchange(listen_socket->socketfd, &src_addr, addrlen); int res = sendto(listen_socket->socketfd, data,