📄 tcp_8c-source.html
字号:
00710 <span class="keywordflow">if</span>(soc-><a class="code" href="structtcb.html#m6">send_unacked</a> == soc-><a class="code" href="structtcb.html#m8">send_next</a>)00711 <span class="keywordflow">return</span>(soc-><a class="code" href="structtcb.html#m9">send_mtu</a>);00712 00713 <span class="keywordflow">return</span>(-1);00714 00715 00716 }00717 00718 00719 <a name="l00736"></a><a class="code" href="tcp_8c.html#a11">00736</a> INT8 <a class="code" href="tcp_8c.html#a11">tcp_abort</a> (INT8 sochandle)00737 {00738 <span class="keyword">struct </span><a class="code" href="structtcb.html">tcb</a>* soc;00739 00740 TCP_DEBUGOUT(<span class="stringliteral">"FUNCTION: tcp_abort\r\n"</span>);00741 00742 <span class="keywordflow">if</span>( NO_OF_TCPSOCKETS < 0 )00743 <span class="keywordflow">return</span>(-1);00744 00745 <span class="keywordflow">if</span>( NO_OF_TCPSOCKETS == 0 )00746 <span class="keywordflow">return</span>(-1);00747 00748 <span class="keywordflow">if</span>( sochandle > NO_OF_TCPSOCKETS ) {00749 TCP_DEBUGOUT(<span class="stringliteral">"Socket handle non-valid\r\n"</span>);00750 <span class="keywordflow">return</span>(-1);00751 }00752 00753 <span class="keywordflow">if</span>( sochandle < 0 ) {00754 TCP_DEBUGOUT(<span class="stringliteral">"Socket handle non-valid\r\n"</span>);00755 <span class="keywordflow">return</span>(-1);00756 }00757 00758 soc = &tcp_socket[sochandle]; <span class="comment">/* Get referense */</span> 00759 00760 <span class="keywordflow">switch</span> (soc-><a class="code" href="structtcb.html#m0">state</a>) {00761 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a42">TCP_STATE_FREE</a>:00762 <span class="keywordflow">return</span>(-1);00763 00764 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a43">TCP_STATE_RESERVED</a>:00765 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a44">TCP_STATE_CLOSED</a>:00766 <span class="keywordflow">return</span>(sochandle);00767 00768 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a52">TCP_STATE_TIMED_WAIT</a>:00769 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a45">TCP_STATE_LISTENING</a>:00770 <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>);00771 <span class="keywordflow">return</span>(sochandle);00772 00773 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a47">TCP_STATE_SYN_SENT</a>:00774 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a46">TCP_STATE_SYN_RECEIVED</a>:00775 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a53">TCP_STATE_CONNECTED</a>:00776 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a48">TCP_STATE_FINW1</a>:00777 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a49">TCP_STATE_FINW2</a>:00778 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a50">TCP_STATE_CLOSING</a>:00779 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a51">TCP_STATE_LAST_ACK</a>:00780 00781 soc-><a class="code" href="structtcb.html#m7">myflags</a> = TCP_FLAG_RESET;00782 <a class="code" href="tcp_8c.html#a16">tcp_sendcontrol</a>(sochandle);00783 <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>);00784 <span class="keywordflow">return</span>(sochandle);00785 00786 <span class="keywordflow">default</span>:00787 <span class="keywordflow">return</span>(-1);00788 }00789 00790 00791 }00792 00793 00794 <a name="l00808"></a><a class="code" href="tcp_8c.html#a12">00808</a> <span class="keywordtype">void</span> <a class="code" href="group__periodic__functions.html#a4">tcp_poll</a> (<span class="keywordtype">void</span>)00809 {00810 <span class="keyword">struct </span><a class="code" href="structtcb.html">tcb</a>* soc;00811 <span class="keyword">static</span> UINT8 handle = 0;00812 UINT8 i;00813 INT32 temp;00814 UINT8 old_retries;00815 00816 <span class="keywordflow">for</span>(i=0; i < NO_OF_TCPSOCKETS; i++ ) {00817 00818 <span class="keywordflow">if</span>(handle > NO_OF_TCPSOCKETS)00819 handle = 0;00820 00821 soc = &tcp_socket[handle];00822 00823 <span class="keywordflow">switch</span>(soc-><a class="code" href="structtcb.html#m0">state</a>) {00824 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a42">TCP_STATE_FREE</a>:00825 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a43">TCP_STATE_RESERVED</a>:00826 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a44">TCP_STATE_CLOSED</a>:00827 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a45">TCP_STATE_LISTENING</a>:00828 00829 <span class="keywordflow">break</span>;00830 00831 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a53">TCP_STATE_CONNECTED</a>:00832 00833 <span class="comment">/* In CONNECTED State we have */</span> 00834 <span class="comment">/* something to do only if we have unacked data */</span>00835 <span class="comment">/* or if connection has been IDLE too long or */</span>00836 <span class="comment">/* unserved close is isuued by user */</span>00837 00838 <span class="comment">/*if(soc->send_next > soc->send_unacked)</span>00839 <span class="comment"> temp = soc->send_next - soc->send_unacked;</span>00840 <span class="comment"> else</span>00841 <span class="comment"> temp = soc->send_unacked - soc->send_next;</span>00842 <span class="comment"> */</span>00843 00844 temp = soc-><a class="code" href="structtcb.html#m8">send_next</a> - soc-><a class="code" href="structtcb.html#m6">send_unacked</a>;00845 00846 <span class="comment">/* Unserved Close? */</span>00847 00848 <span class="keywordflow">if</span>(soc-><a class="code" href="structtcb.html#m2">flags</a> & TCP_INTFLAGS_CLOSEPENDING) {00849 <span class="comment">/* Can we send the close now */</span>00850 00851 <span class="keywordflow">if</span>(temp == 0) {00852 soc-><a class="code" href="structtcb.html#m7">myflags</a> = TCP_FLAG_ACK | TCP_FLAG_FIN;00853 soc-><a class="code" href="structtcb.html#m8">send_next</a>++;00854 <a class="code" href="tcp_8c.html#a16">tcp_sendcontrol</a>(handle);00855 <a class="code" href="tcp_8c.html#a20">tcp_newstate</a>(soc, <a class="code" href="tcp__ip_8h.html#a48">TCP_STATE_FINW1</a>); 00856 soc-><a class="code" href="structtcb.html#m2">flags</a> ^= TCP_INTFLAGS_CLOSEPENDING;00857 00858 handle++;00859 00860 <span class="keywordflow">return</span>; 00861 00862 }00863 }00864 00865 <span class="comment">/* Socket timeout? */</span>00866 00867 <span class="keywordflow">if</span>(<a class="code" href="timers_8c.html#a7">check_timer</a>(soc-><a class="code" href="structtcb.html#m13">persist_timerh</a>) == 0) {00868 00869 soc-><a class="code" href="structtcb.html#m7">myflags</a> = TCP_FLAG_ACK | TCP_FLAG_FIN;00870 soc-><a class="code" href="structtcb.html#m8">send_next</a>++;00871 <a class="code" href="tcp_8c.html#a16">tcp_sendcontrol</a>(handle);00872 <a class="code" href="tcp_8c.html#a20">tcp_newstate</a>(soc, <a class="code" href="tcp__ip_8h.html#a48">TCP_STATE_FINW1</a>); 00873 00874 <span class="comment">/* Inform application */</span>00875 00876 soc-><a class="code" href="structtcb.html#m16">event_listener</a>(handle, <a class="code" href="tcp__ip_8h.html#a56">TCP_EVENT_CLOSE</a>, soc-><a class="code" href="structtcb.html#m3">rem_ip</a>, soc-><a class="code" href="structtcb.html#m4">remport</a>);00877 00878 handle++;00879 00880 <span class="keywordflow">return</span>; 00881 } 00882 00883 <span class="comment">/* Is there unacked data? */</span>00884 00885 <span class="keywordflow">if</span>(temp == 0)00886 <span class="keywordflow">break</span>;00887 00888 <span class="comment">/* Is there timeout? */</span>00889 00890 <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 )00891 <span class="keywordflow">break</span>;00892 00893 <span class="comment">/* De we have retries left */</span>00894 00895 <span class="keywordflow">if</span>(soc-><a class="code" href="structtcb.html#m15">retries_left</a> == 0) {00896 <span class="comment">/* No retries, must reset */</span>00897 00898 TCP_DEBUGOUT(<span class="stringliteral">"Retries used up, resetting\r\n"</span>);00899 00900 soc-><a class="code" href="structtcb.html#m7">myflags</a> = TCP_FLAG_RESET;00901 <a class="code" href="tcp_8c.html#a16">tcp_sendcontrol</a>(handle);00902 00903 <span class="comment">/* Inform application */</span>00904 00905 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>);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -