📄 tcp_8c-source.html
字号:
00906 00907 <span class="keywordflow">if</span>(soc-><a class="code" href="structtcb.html#m1">type</a> & <a class="code" href="tcp__ip_8h.html#a39">TCP_TYPE_SERVER</a> )00908 <a class="code" href="tcp_8c.html#a20">tcp_newstate</a>(soc, <a class="code" href="tcp__ip_8h.html#a45">TCP_STATE_LISTENING</a>);00909 <span class="keywordflow">else</span>00910 <a class="code" href="tcp_8c.html#a20">tcp_newstate</a>(soc, <a class="code" href="tcp__ip_8h.html#a44">TCP_STATE_CLOSED</a>);00911 00912 handle++;00913 00914 <span class="keywordflow">return</span>; 00915 }00916 00917 soc-><a class="code" href="structtcb.html#m15">retries_left</a>--;00918 <a class="code" href="timers_8c.html#a6">init_timer</a>(soc-><a class="code" href="structtcb.html#m14">retransmit_timerh</a>, <a class="code" href="group__opentcp__config.html#a11">TCP_DEF_RETRY_TOUT</a>*<a class="code" href="timers_8h.html#a1">TIMERTIC</a>);00919 00920 <span class="comment">/* Yep, there is unacked data */</span>00921 <span class="comment">/* Application should send the old data */</span>00922 00923 <span class="keywordflow">if</span>(temp>soc-><a class="code" href="structtcb.html#m9">send_mtu</a>)00924 temp = soc-><a class="code" href="structtcb.html#m9">send_mtu</a>;00925 00926 <span class="comment">/* Rewind Send Next because the send process will adjust it */</span>00927 <span class="comment">/* So cheat the tcp_send to think there is no unacked data */</span>00928 00929 soc-><a class="code" href="structtcb.html#m8">send_next</a> = soc-><a class="code" href="structtcb.html#m6">send_unacked</a>;00930 00931 <span class="comment">/* tcp_send will set the retiries_left to maximum but this is */</span>00932 <span class="comment">/* retransmitting already so we need to retain it in order to */</span>00933 <span class="comment">/* avoid dead-lock */</span>00934 00935 old_retries = soc-><a class="code" href="structtcb.html#m15">retries_left</a>;00936 00937 temp = soc-><a class="code" href="structtcb.html#m16">event_listener</a>(handle, <a class="code" href="tcp__ip_8h.html#a59">TCP_EVENT_REGENERATE</a>, (UINT32)temp, 0);00938 00939 soc-><a class="code" href="structtcb.html#m15">retries_left</a> = old_retries;00940 00941 <span class="keywordflow">if</span>(temp <= 0) {00942 00943 <span class="comment">/* No data by application, must be something wrong */</span>00944 soc-><a class="code" href="structtcb.html#m7">myflags</a> = TCP_FLAG_RESET;00945 <a class="code" href="tcp_8c.html#a16">tcp_sendcontrol</a>(handle);00946 00947 <span class="comment">/* Inform application */</span>00948 00949 soc-><a class="code" href="structtcb.html#m16">event_listener</a>(handle, <a class="code" href="tcp__ip_8h.html#a57">TCP_EVENT_ABORT</a>, soc-><a class="code" href="structtcb.html#m3">rem_ip</a>, soc-><a class="code" href="structtcb.html#m4">remport</a>);00950 00951 <span class="keywordflow">if</span>(soc-><a class="code" href="structtcb.html#m1">type</a> & <a class="code" href="tcp__ip_8h.html#a39">TCP_TYPE_SERVER</a> )00952 <a class="code" href="tcp_8c.html#a20">tcp_newstate</a>(soc, <a class="code" href="tcp__ip_8h.html#a45">TCP_STATE_LISTENING</a>);00953 <span class="keywordflow">else</span>00954 <a class="code" href="tcp_8c.html#a20">tcp_newstate</a>(soc, <a class="code" href="tcp__ip_8h.html#a44">TCP_STATE_CLOSED</a>);00955 00956 handle++;00957 00958 <span class="keywordflow">return</span>; 00959 00960 }00961 00962 <span class="comment">/* Application has send data */</span>00963 00964 handle++;00965 00966 <span class="keywordflow">return</span>;00967 00968 00969 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a47">TCP_STATE_SYN_SENT</a>:00970 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a46">TCP_STATE_SYN_RECEIVED</a>:00971 00972 <span class="comment">/* Is there timeout? */</span>00973 <span class="keywordflow">if</span>( <a class="code" href="timers_8c.html#a7">check_timer</a>(soc-><a class="code" href="structtcb.html#m14">retransmit_timerh</a>) != 0 )00974 <span class="keywordflow">break</span>;00975 00976 TCP_DEBUGOUT(<span class="stringliteral">"Timeout\r\n"</span>);00977 00978 <span class="comment">/* Yep, timeout. Is there reties left? */</span>00979 <span class="keywordflow">if</span>( soc-><a class="code" href="structtcb.html#m15">retries_left</a> ) {00980 soc-><a class="code" href="structtcb.html#m15">retries_left</a>--;00981 <span class="keywordflow">if</span>(soc-><a class="code" href="structtcb.html#m0">state</a> == <a class="code" href="tcp__ip_8h.html#a47">TCP_STATE_SYN_SENT</a>)00982 <a class="code" href="timers_8c.html#a6">init_timer</a>(soc-><a class="code" href="structtcb.html#m14">retransmit_timerh</a>, <a class="code" href="group__opentcp__config.html#a13">TCP_SYN_RETRY_TOUT</a>*<a class="code" href="timers_8h.html#a1">TIMERTIC</a>);00983 <span class="keywordflow">else</span>00984 <a class="code" href="timers_8c.html#a6">init_timer</a>(soc-><a class="code" href="structtcb.html#m14">retransmit_timerh</a>, <a class="code" href="group__opentcp__config.html#a11">TCP_DEF_RETRY_TOUT</a>*<a class="code" href="timers_8h.html#a1">TIMERTIC</a>);00985 00986 <a class="code" href="tcp_8c.html#a16">tcp_sendcontrol</a>(handle);00987 00988 handle++;00989 00990 <span class="keywordflow">return</span>; 00991 } <span class="keywordflow">else</span> {00992 <span class="comment">/* Retries used up */</span>00993 TCP_DEBUGOUT(<span class="stringliteral">"Retries used up, resetting\r\n"</span>);00994 00995 <span class="keywordflow">if</span>(soc-><a class="code" href="structtcb.html#m1">type</a> & <a class="code" href="tcp__ip_8h.html#a39">TCP_TYPE_SERVER</a> )00996 <a class="code" href="tcp_8c.html#a20">tcp_newstate</a>(soc, <a class="code" href="tcp__ip_8h.html#a45">TCP_STATE_LISTENING</a>);00997 <span class="keywordflow">else</span>00998 <a class="code" href="tcp_8c.html#a20">tcp_newstate</a>(soc, <a class="code" href="tcp__ip_8h.html#a44">TCP_STATE_CLOSED</a>);00999 01000 soc-><a class="code" href="structtcb.html#m7">myflags</a> = TCP_FLAG_RESET;01001 <a class="code" href="tcp_8c.html#a16">tcp_sendcontrol</a>(handle);01002 01003 <span class="comment">/* Inform application */</span>01004 01005 soc-><a class="code" href="structtcb.html#m16">event_listener</a>(handle, <a class="code" href="tcp__ip_8h.html#a57">TCP_EVENT_ABORT</a>, soc-><a class="code" href="structtcb.html#m3">rem_ip</a>, soc-><a class="code" href="structtcb.html#m4">remport</a>);01006 01007 handle++;01008 01009 <span class="keywordflow">return</span>;01010 }01011 01012 <span class="keywordflow">break</span>;01013 01014 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a52">TCP_STATE_TIMED_WAIT</a>:01015 01016 <span class="comment">/* Is there timeout? */</span>01017 01018 <span class="keywordflow">if</span>( <a class="code" href="timers_8c.html#a7">check_timer</a>(soc-><a class="code" href="structtcb.html#m14">retransmit_timerh</a>) != 0 )01019 <span class="keywordflow">break</span>;01020 01021 TCP_DEBUGOUT(<span class="stringliteral">"Timeout\r\n"</span>);01022 01023 <span class="keywordflow">if</span>(soc-><a class="code" href="structtcb.html#m15">retries_left</a>) {01024 soc-><a class="code" href="structtcb.html#m15">retries_left</a>--;01025 <a class="code" href="timers_8c.html#a6">init_timer</a>(soc-><a class="code" href="structtcb.html#m14">retransmit_timerh</a>, <a class="code" href="group__opentcp__config.html#a11">TCP_DEF_RETRY_TOUT</a>*<a class="code" href="timers_8h.html#a1">TIMERTIC</a>);01026 <span class="keywordflow">break</span>;01027 }01028 01029 <span class="keywordflow">if</span>(soc-><a class="code" href="structtcb.html#m1">type</a> & <a class="code" href="tcp__ip_8h.html#a39">TCP_TYPE_SERVER</a> )01030 <a class="code" href="tcp_8c.html#a20">tcp_newstate</a>(soc, <a class="code" href="tcp__ip_8h.html#a45">TCP_STATE_LISTENING</a>);01031 <span class="keywordflow">else</span>01032 <a class="code" href="tcp_8c.html#a20">tcp_newstate</a>(soc, <a class="code" href="tcp__ip_8h.html#a44">TCP_STATE_CLOSED</a>);01033 01034 <span class="keywordflow">break</span>;01035 01036 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a51">TCP_STATE_LAST_ACK</a>:01037 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a48">TCP_STATE_FINW1</a>:01038 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a50">TCP_STATE_CLOSING</a>:01039 01040 <span class="comment">/* Is there timeout? */</span>01041 01042 <span class="keywordflow">if</span>( <a class="code" href="timers_8c.html#a7">check_timer</a>(soc-><a class="code" href="structtcb.html#m14">retransmit_timerh</a>) != 0 )01043 <span class="keywordflow">break</span>;01044 01045 TCP_DEBUGOUT(<span class="stringliteral">"Timeout\r\n"</span>); 01046 01047 <span class="comment">/* Yep, timeout. Is there reties left? */</span>01048 01049 <span class="keywordflow">if</span>( soc-><a class="code" href="structtcb.html#m15">retries_left</a> ) {01050 soc-><a class="code" href="structtcb.html#m15">retries_left</a>--;01051 <a class="code" href="timers_8c.html#a6">init_timer</a>(soc-><a class="code" href="structtcb.html#m14">retransmit_timerh</a>, <a class="code" href="group__opentcp__config.html#a11">TCP_DEF_RETRY_TOUT</a>*<a class="code" href="timers_8h.html#a1">TIMERTIC</a>);01052 soc-><a class="code" href="structtcb.html#m7">myflags</a> = TCP_FLAG_FIN | TCP_FLAG_ACK;01053 <a class="code" href="tcp_8c.html#a16">tcp_sendcontrol</a>(handle);01054 01055 handle++;01056 01057 01058 <span class="keywordflow">return</span>; 01059 } <span class="keywordflow">else</span> {01060 <span class="comment">/* Retries used up */</span>01061 TCP_DEBUGOUT(<span class="stringliteral">"Retries used up, resetting\r\n"</span>);01062 01063 <span class="keywordflow">if</span>(soc-><a class="code" href="structtcb.html#m1">type</a> & <a class="code" href="tcp__ip_8h.html#a39">TCP_TYPE_SERVER</a> )01064 <a class="code" href="tcp_8c.html#a20">tcp_newstate</a>(soc, <a class="code" href="tcp__ip_8h.html#a45">TCP_STATE_LISTENING</a>);01065 <span class="keywordflow">else</span>01066 <a class="code" href="tcp_8c.html#a20">tcp_newstate</a>(soc, <a class="code" href="tcp__ip_8h.html#a44">TCP_STATE_CLOSED</a>);01067 01068 soc-><a class="code" href="structtcb.html#m7">myflags</a> = TCP_FLAG_RESET;01069 <a class="code" href="tcp_8c.html#a16">tcp_sendcontrol</a>(handle);01070 01071
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -