Index: /trunk/src/VBox/Devices/Network/slirp/socket.h
===================================================================
--- /trunk/src/VBox/Devices/Network/slirp/socket.h	(revision 86842)
+++ /trunk/src/VBox/Devices/Network/slirp/socket.h	(revision 86843)
@@ -60,4 +60,6 @@
                                   * so_mconn, for non-blocking connections */
     uint8_t         *so_ohdr;    /* unmolested IP header of the datagram in so_m */
+    caddr_t         so_optp;     /* tcp options in so_m */
+    int             so_optlen;   /* length of options in so_m */
     int             so_urgc;
     struct in_addr  so_faddr;    /* foreign host table entry */
Index: /trunk/src/VBox/Devices/Network/slirp/tcp_input.c
===================================================================
--- /trunk/src/VBox/Devices/Network/slirp/tcp_input.c	(revision 86842)
+++ /trunk/src/VBox/Devices/Network/slirp/tcp_input.c	(revision 86843)
@@ -324,8 +324,14 @@
         so = inso;
         Log4(("NAT: tcp_input: %R[natsock]\n", so));
+
         /* Re-set a few variables */
         tp = sototcpcb(so);
+
         m = so->so_m;
-        so->so_m = 0;
+        optp = so->so_optp;     /* points into m if set */
+        optlen = so->so_optlen;
+        so->so_m = NULL;
+        so->so_optp = 0;
+        so->so_optlen = 0;
 
         if (RT_LIKELY(so->so_ohdr != NULL))
@@ -826,4 +832,6 @@
                 so->so_ti = ti;
                 so->so_ohdr = RTMemDup(ohdr, ohdrlen);
+                so->so_optp = optp;
+                so->so_optlen = optlen;
                 tp->t_timer[TCPT_KEEP] = TCPTV_KEEP_INIT;
                 TCP_STATE_SWITCH_TO(tp, TCPS_SYN_RECEIVED);
@@ -2015,5 +2023,6 @@
     int mss;
 
-    LogFlowFunc(("ENTER: tcp_mss: tp = %R[tcpcb793], offer = %d\n", tp, offer));
+    LogFlowFunc(("ENTER: tcp_mss: offer=%u, t_maxseg=%u; tp=%R[natsock]\n",
+                 offer, (unsigned int)tp->t_maxseg, so));
 
     mss = min(if_mtu, if_mru) - sizeof(struct tcpiphdr);
@@ -2029,6 +2038,5 @@
     sbreserve(pData, &so->so_rcv, tcp_rcvspace+((tcp_rcvspace%mss)?(mss-(tcp_rcvspace%mss)):0));
 
-    Log2((" returning mss = %d\n", mss));
-
+    LogFlowFunc(("LEAVE: mss=%d\n", mss));
     return mss;
 }
