| 
                         <div class="dp-highlighter bg_cpp"> 
<div class="bar"> 
<div class="tools"> 
[cpp]?<a class="ViewSource" title="view plain" href="http://blog.csdn.net/geekcome/article/details/7492423">view plain<a class="CopyToClipboard" title="copy" href="http://blog.csdn.net/geekcome/article/details/7492423">copy 
?
- ?
 
- 
 - ???
 
- 
 - ????unsigned??daddr,?unsigned??len,??
 
- 
 - {??
 
- 
 - ?????sock?*sk;??
 
- 
 - ??????
 
- 
 - ????{??
 
- 
 - ????????(0);??
 
- 
 - ??
 
- 
 - ????{??
 
- 
 - ????????(0);??
 
- 
 - ????
 
- 
 - ????
 
- pkt_type!=PACKET_HOST)??
 
- ????{??
 
- 
 - ????????(0);??
 
- 
 - ????
 
- h.th;??
 
- ??
 
- 
 - ?
 
- 
 - ??
 
- dest,?saddr,?th->source,?daddr);??
 
- ??
 
- 
 - ?
 
- 
 - ?
 
- 
 - ?
 
- 
 - ??
 
- 
 - ?????(sk!=NULL?&&?(sk->zapped?||?sk->state==TCP_CLOSE))??
 
- 
 - ??
 
- 
 - ????{??
 
- 
 - ????????{??
 
- sk?=?NULL;??
 
- ????????????kfree_skb(skb,FREE_READ);??
 
- 
 - ?
 
- 
 - ??
 
- 
 - ????????}??
 
- seq?=?ntohl(th->seq);??
 
- ??
 
- 
 - ?????????(sk?==?NULL)???
 
- 
 - ?????????????
 
- 
 - ??
 
- ip_hdr->tos,255);??
 
- ????????????skb->sk?=?NULL;??
 
- 
 - ?
 
- 
 - ????????????kfree_skb(skb,?FREE_READ);??
 
- 
 - ????????}??
 
- 
 - ????????skb->len?=?len;??
 
- acked?=?0;??
 
- ????????skb->used?=?0;??
 
- free?=?0;??
 
- ????????skb->saddr?=?daddr;??
 
- daddr?=?saddr;??
 
- ??????
 
- 
 - ????????cli();??
 
- inuse)???
 
- ????????{??
 
- back_log,?skb);??
 
- ????????????sti();??
 
- 
 - ????????}??
 
- inuse?=?1;??
 
- ????????sti();??
 
- 
 - ??????
 
- 
 - ?????????(sk==NULL)???
 
- 
 - ????????????tcp_reset(daddr,255);??
 
- sk?=?NULL;??
 
- ????????????kfree_skb(skb,?FREE_READ);??
 
- 
 - ????????}??
 
- 
 - ??
 
- 
 - ?????(!sk->prot)???
 
- 
 - ????????printk();??
 
- 
 - ????}??
 
- 
 - ??
 
- 
 - ?
 
- 
 - ???????
 
- rmem_alloc?+?skb->mem_len?>=?sk->rcvbuf)???
 
- ????{??
 
- 
 - ????????release_sock(sk);??
 
- 
 - ????}??
 
- 
 - ????skb->sk=sk;??
 
- rmem_alloc?+=?skb->mem_len;??
 
- ??
 
- 
 - ?
 
- 
 - ?
 
- 
 - ??
 
- 
 - ????(sk->state!=TCP_ESTABLISHED)?????????
 
- 
 - ??????
 
- 
 - ?
 
- 
 - ???????
 
- state==TCP_LISTEN)??
 
- ????????{??
 
- ack)????
 
- ????????????????tcp_reset(daddr,saddr,th,sk->prot,opt,sk->ip_tos,?sk->ip_ttl);??
 
- 
 - ?????????????
 
- 
 - ?
 
- 
 - ?
 
- 
 - ?????????????????
 
- rst?||?!th->syn?||?th->ack?||?ip_chk_addr(daddr)!=IS_MYADDR)??
 
- ????????????{??
 
- 
 - ????????????????release_sock(sk);??
 
- 
 - ????????????}??
 
- 
 - ?????????????
 
- 
 - ??
 
- 
 - ????????????tcp_conn_request(sk,?daddr,?tcp_init_seq());??
 
- 
 - ?????????????
 
- 
 - ?
 
- 
 - ?
 
- 
 - ?
 
- 
 - ???????????????
 
- 
 - ?????????????0;??
 
- 
 - ??????
 
- 
 - ?????????(sk->state?==?TCP_SYN_RECV?&&?th->syn?&&?th->seq+1?==?sk->acked_seq)??
 
- 
 - ????????????kfree_skb(skb,?FREE_READ);??
 
- 
 - ?????????????0;??
 
- 
 - ??????????
 
- 
 - ?
 
- 
 - ??
 
- 
 - ????????(sk->state==TCP_SYN_SENT)??
 
- 
 - ??????????????
 
- ack)??
 
- ????????????{??
 
- 
 - ????????????????(!tcp_ack(sk,len))??
 
- 
 - ?????????????????????
 
- 
 - ????????????????????tcp_statistics.TcpAttemptFails++;??
 
- 
 - ????????????????????????sk->prot,sk->ip_ttl);??
 
- 
 - ????????????????????release_sock(sk);??
 
- 
 - ????????????????}??
 
- rst)??
 
- ?????????????????????tcp_std_reset(sk,skb);??
 
- syn)??
 
- ????????????????{??
 
- 
 - ??
 
- 
 - ????????????????????release_sock(sk);??
 
- 
 - ????????????????}??
 
- 
 - ?
 
- 
 - ??
 
- 
 - ????????????????sk->acked_seq=th->seq+1;??
 
- fin_seq=th->seq;??
 
- ????????????????tcp_send_ack(sk->sent_seq,sk->acked_seq,sk,sk->daddr);??
 
- 
 - ????????????????tcp_options(sk,th);??
 
- dummy_th.dest=th->source;??
 
- ????????????????sk->copied_seq?=?sk->acked_seq;??
 
- dead)??
 
- ????????????????{??
 
- state_change(sk);??
 
- ????????????????????sock_wake_async(sk->socket,?0);??
 
- 
 - ????????????????(sk->max_window==0)??
 
- 
 - ????????????????????sk->max_window?=?32;??
 
- mss?=?min(sk->max_window,?sk->mtu);??
 
- ????????????????}??
 
- 
 - ??????????????
 
- 
 - ??????????????????
 
- syn?&&?!th->rst)??
 
- ????????????????{??
 
- 
 - ??
 
- saddr==saddr?&&?sk->daddr==daddr?&&??
 
- ????????????????????????sk->dummy_th.source==th->source?&&??
 
- dummy_th.dest==th->dest)??
 
- ????????????????????{??
 
- 
 - ?????????????????????????tcp_std_reset(sk,skb);??
 
- 
 - ????????????????????tcp_set_state(sk,TCP_SYN_RECV);??
 
- 
 - ?????????????????????
 
- 
 - ?
 
- 
 - ????????????????}?????????
 
- 
 - ????????????????kfree_skb(skb,?FREE_READ);??
 
- 
 - ?????????????????0;??
 
- 
 - ?????????????
 
- 
 - ??
 
- 
 - ????????}??
 
- 
 - ?????
 
- 
 - ?
 
- 
 - ??
 
- 
 - ??
 
- 
 - ?????????(sk->state?==?TCP_TIME_WAIT?&&?th->syn?&&?sk->dead?&&???
 
- seq,?sk->acked_seq)?&&?!th->rst)??
 
- ????????{??
 
- write_seq;??
 
- ????????????(sk->debug)??
 
- 
 - ????????????tcp_statistics.TcpEstabResets++;?????????
 
- rmem_alloc?-=?skb->mem_len;??
 
- ????????????skb->sk?=?NULL;??
 
- err=ECONNRESET;??
 
- ????????????tcp_set_state(sk,?TCP_CLOSE);??
 
- shutdown?=?SHUTDOWN_MASK;??
 
- ????????????release_sock(sk);??
 
- 
 - ?????????????(sk?&&?sk->state==TCP_LISTEN)??
 
- 
 - ????????????????sk->inuse=1;??
 
- sk?=?sk;??
 
- ????????????????sk->rmem_alloc?+=?skb->mem_len;??
 
- 
 - ????????????????release_sock(sk);??
 
- 
 - ????????????}??
 
- 
 - ?????????????0;??
 
- 
 - ??
 
- 
 - ??
 
- 
 - ?
 
- 
 - ?
 
- 
 - ??????
 
- 
 - ????{??
 
- 
 - ????????release_sock(sk);??
 
- 
 - ????}??
 
- 
 - ????(th->rst)??
 
- 
 - ??????
 
- 
 - ?
 
- 
 - ???????
 
- syn?&&?!syn_ok)??
 
- ????{??
 
- ip_hdr->tos,?255);??
 
- ?????????tcp_std_reset(sk,skb);?????
 
- 
 - ??
 
- 
 - ?
 
- 
 - ???????
 
- 
 - ????(th->ack?&&?!tcp_ack(sk,len))??
 
- 
 - ?????????
 
- 
 - ??
 
- 
 - ????????(sk->state==TCP_SYN_RECV)??
 
- 
 - ????????????tcp_reset(daddr,sk->ip_ttl);??
 
- 
 - ????????kfree_skb(skb,?FREE_READ);??
 
- 
 - ?????????0;??
 
- 
 - ??????
 
- 
 - ??
 
- 
 - ?
 
- 
 - ??????????
 
- 
 - ????{??
 
- 
 - ????????release_sock(sk);??
 
- 
 - ????}??
 
- 
 - ??????
 
- 
 - ?
 
- 
 - ??????
 
- 
 - ????????release_sock(sk);??
 
- 
 - ????}??
 
- 
 - ?????
 
- 
 - ???
 
- 
 - ????release_sock(sk);??
 
- 
 - }??
 
 
4、应用层                         (编辑:上海站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |