<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、应用层 (编辑:淮北站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|