diff -ruN netsnmp-orig/include/net-snmp/library/snmpTCPBaseDomain.h netsnmp/include/net-snmp/library/snmpTCPBaseDomain.h
--- netsnmp-orig/include/net-snmp/library/snmpTCPBaseDomain.h	2024-05-07 07:23:25.395703969 +0200
+++ netsnmp/include/net-snmp/library/snmpTCPBaseDomain.h	2024-05-07 14:07:48.124946455 +0200
@@ -14,6 +14,8 @@
                              void **opaque, int *olength);
     int netsnmp_tcpbase_send(netsnmp_transport *t, const void *buf, int size,
                              void **opaque, int *olength);
+    int netsnmp_tcpbase_session_init(struct netsnmp_transport_s *,
+                                     struct snmp_session *sess);
         
 #ifdef __cplusplus
 }

diff -ruN netsnmp-orig/snmplib/transports/snmpTCPBaseDomain.c netsnmp/snmplib/transports/snmpTCPBaseDomain.c
--- netsnmp-orig/snmplib/transports/snmpTCPBaseDomain.c	2024-05-07 07:23:25.427703687 +0200
+++ netsnmp/snmplib/transports/snmpTCPBaseDomain.c	2024-05-07 14:07:48.156946268 +0200
@@ -104,3 +104,23 @@
     }
     return rc;
 }
+
+
+int netsnmp_tcpbase_session_init(struct netsnmp_transport_s *transport,
+                                 struct snmp_session *sess) {
+    if (!sess) {
+        DEBUGMSGTL(("netsnmp_tcpbase", "Cannot get local port number because the session is NULL\n"));
+        return SNMPERR_SUCCESS;
+    }
+    
+    struct sockaddr_in sin;
+    socklen_t len = sizeof(sin);
+    if (getsockname(transport->sock, (struct sockaddr *)&sin, &len) == -1)
+        DEBUGMSGTL(("netsnmp_tcpbase", "getsockname error %s\n", strerror(errno)));
+    else
+        sess->local_port = ntohs(sin.sin_port);
+    
+    DEBUGMSGTL(("netsnmp_tcpbase", "local port number %d\n", sess->local_port));
+    
+    return SNMPERR_SUCCESS;
+}

diff -ruN netsnmp-orig/snmplib/transports/snmpTCPDomain.c netsnmp/snmplib/transports/snmpTCPDomain.c
--- netsnmp-orig/snmplib/transports/snmpTCPDomain.c	2024-05-07 07:23:25.427703687 +0200
+++ netsnmp/snmplib/transports/snmpTCPDomain.c	2024-05-07 14:07:48.156946268 +0200
@@ -296,6 +296,7 @@
     t->f_send     = netsnmp_tcpbase_send;
     t->f_close    = netsnmp_socketbase_close;
     t->f_accept   = netsnmp_tcp_accept;
+    t->f_setup_session = netsnmp_tcpbase_session_init;
     t->f_fmtaddr  = netsnmp_tcp_fmtaddr;
     t->f_get_taddr = netsnmp_ipv4_get_taddr;
 
