<dec f='src/src/sys/netinet/tcp_var.h' l='990' type='int syn_cache_add(struct sockaddr * , struct sockaddr * , struct tcphdr * , unsigned int , struct socket * , struct mbuf * , u_char * , int , struct tcp_opt_info * )'/>
<use f='src/src/sys/netinet/tcp_input.c' l='1888' u='c' c='tcp_input'/>
<def f='src/src/sys/netinet/tcp_input.c' l='4314' ll='4519' type='int syn_cache_add(struct sockaddr * src, struct sockaddr * dst, struct tcphdr * th, unsigned int hlen, struct socket * so, struct mbuf * m, u_char * optp, int optlen, struct tcp_opt_info * oi)'/>
<doc f='src/src/sys/netinet/tcp_input.c' l='4300'>/*
 * Given a LISTEN socket and an inbound SYN request, add
 * this to the syn cache, and send back a segment:
 *	&lt;SEQ=ISS&gt;&lt;ACK=RCV_NXT&gt;&lt;CTL=SYN,ACK&gt;
 * to the source.
 *
 * IMPORTANT NOTE: We do _NOT_ ACK data that might accompany the SYN.
 * Doing so would require that we hold onto the data and deliver it
 * to the application.  However, if we are the target of a SYN-flood
 * DoS attack, an attacker could send data which would eventually
 * consume all available buffer space if it were ACKed.  By not ACKing
 * the data, we avoid this DoS scenario.
 */</doc>
