Index: /trunk/src/VBox/NetworkServices/NAT/pxtcp.c
===================================================================
--- /trunk/src/VBox/NetworkServices/NAT/pxtcp.c	(revision 58547)
+++ /trunk/src/VBox/NetworkServices/NAT/pxtcp.c	(revision 58548)
@@ -276,4 +276,6 @@
 static void pxtcp_pcb_err(void *, err_t);
 
+static err_t pxtcp_pcb_accept_outbound(struct tcp_pcb *, struct pbuf *, int, ipX_addr_t *, u16_t);
+
 static err_t pxtcp_pcb_forward_outbound(struct pxtcp *, struct pbuf *);
 static void pxtcp_pcb_forward_outbound_close(struct pxtcp *);
@@ -1004,12 +1006,22 @@
 {
     struct pbuf *p = (struct pbuf *)arg;
+
+    LWIP_UNUSED_ARG(error);     /* always ERR_OK */
+
+    return pxtcp_pcb_accept_outbound(newpcb, p,
+               PCB_ISIPV6(newpcb), &newpcb->local_ip, newpcb->local_port);
+}
+
+
+static err_t
+pxtcp_pcb_accept_outbound(struct tcp_pcb *newpcb, struct pbuf *p,
+                          int is_ipv6, ipX_addr_t *dst_addr, u16_t dst_port)
+{
     struct pxtcp *pxtcp;
-    ipX_addr_t dst_addr;
+    ipX_addr_t mapped_dst_addr;
     int sdom;
     SOCKET sock;
     ssize_t nsent;
     int sockerr = 0;
-
-    LWIP_UNUSED_ARG(error);     /* always ERR_OK */
 
     /*
@@ -1026,9 +1038,9 @@
     tcp_setprio(newpcb, TCP_PRIO_MAX);
 
-    pxremap_outbound_ipX(PCB_ISIPV6(newpcb), &dst_addr, &newpcb->local_ip);
-
-    sdom = PCB_ISIPV6(newpcb) ? PF_INET6 : PF_INET;
+    pxremap_outbound_ipX(is_ipv6, &mapped_dst_addr, dst_addr);
+
+    sdom = is_ipv6 ? PF_INET6 : PF_INET;
     sock = proxy_connected_socket(sdom, SOCK_STREAM,
-                                  &dst_addr, newpcb->local_port);
+                                  &mapped_dst_addr, dst_port);
     if (sock == INVALID_SOCKET) {
         sockerr = SOCKERRNO();
