The tcp_accept() function needs to be modified to handle SYN packets with data in them. Originally when the tcp_accept() function was called, it destroyed the sk_buff which contained the data from the segment. The function was modified (appendix A.2.2) to check for any data in the packet. If data is found, the segment is unlinked from the original sock structure queue and re-queued on the new sock structure. This will allow the tcp_recv() function to access the data in the segment and pass it on to the user.