From 547c056bf4fe9a8812583dfce7eda14ecff58600 Mon Sep 17 00:00:00 2001 From: Swastik Baranwal Date: Wed, 10 Jul 2024 08:42:37 +0530 Subject: [PATCH] net: fix TcpConn.peer_ip/0 to only return the ip address, without the port number (#21831) --- vlib/net/tcp.c.v | 10 +++++++++- vlib/net/tcp_simple_client_server_test.v | 4 ++++ vlib/net/tcp_test.v | 3 +++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/vlib/net/tcp.c.v b/vlib/net/tcp.c.v index 3a265ef1ed..d164646eec 100644 --- a/vlib/net/tcp.c.v +++ b/vlib/net/tcp.c.v @@ -297,7 +297,15 @@ pub fn (c &TcpConn) peer_addr() !Addr { // peer_ip retrieves the ip address used by the peer, and returns it as a string pub fn (c &TcpConn) peer_ip() !string { - return c.peer_addr()!.str() + address := c.peer_addr()!.str() + if address.contains(']:') { + // ipv6 addresses similar to this: '[::1]:46098' + ip := address.all_before(']:').all_after('[') + return ip + } + // ipv4 addresses similar to '127.0.0.1:7346' + ip := address.all_before(':') + return ip } pub fn (c &TcpConn) addr() !Addr { diff --git a/vlib/net/tcp_simple_client_server_test.v b/vlib/net/tcp_simple_client_server_test.v index d4db326fe0..ee85f7dc24 100644 --- a/vlib/net/tcp_simple_client_server_test.v +++ b/vlib/net/tcp_simple_client_server_test.v @@ -64,6 +64,10 @@ fn test_socket() { fn test_socket_write_and_read() { mut server, mut client, mut socket := setup() + addr := socket.peer_addr()! + ip := socket.peer_ip()! + assert ip in ['::1', 'localhost', '127.0.0.1'] + println('> ip: ${ip} | addr: ${addr}') defer { cleanup(mut server, mut client, mut socket) } diff --git a/vlib/net/tcp_test.v b/vlib/net/tcp_test.v index abdd340894..5055a386cf 100644 --- a/vlib/net/tcp_test.v +++ b/vlib/net/tcp_test.v @@ -35,6 +35,9 @@ fn echo(address string) ! { println('local: ' + c.addr()!.str()) println(' peer: ' + c.peer_addr()!.str()) + ip := c.peer_ip()! + println(' ip: ${ip}') + assert ip in ['::1', 'localhost', '127.0.0.1'] data := 'Hello from vlib/net!' c.write_string(data)!