📄 tcp_8c-source.html
字号:
00498 <span class="keywordflow">return</span>(-1);00499 }00500 00501 soc = &tcp_socket[sockethandle]; <span class="comment">/* Get socket */</span>00502 00503 <span class="keywordflow">if</span>(soc-><a class="code" href="structtcb.html#m0">state</a> != <a class="code" href="tcp__ip_8h.html#a53">TCP_STATE_CONNECTED</a>) {00504 TCP_DEBUGOUT(<span class="stringliteral">"TCP is not connected!!\r\n"</span>);00505 <span class="keywordflow">return</span>(-1);00506 }00507 00508 <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>) {00509 TCP_DEBUGOUT(<span class="stringliteral">"TCP contains unacked data, cannot send more\r\n"</span>);00510 <span class="keywordflow">return</span>(-1);00511 }00512 00513 <span class="keywordflow">if</span>( dlen > blen )00514 dlen = blen;00515 00516 <span class="keywordflow">if</span>(dlen + MIN_TCP_HLEN > soc-><a class="code" href="structtcb.html#m9">send_mtu</a>) {00517 <span class="keywordflow">if</span>(soc-><a class="code" href="structtcb.html#m9">send_mtu</a> > MIN_TCP_HLEN)00518 dlen = soc-><a class="code" href="structtcb.html#m9">send_mtu</a> - MIN_TCP_HLEN;00519 <span class="keywordflow">else</span>00520 <span class="keywordflow">return</span>(-1);00521 }00522 00523 soc-><a class="code" href="structtcb.html#m8">send_next</a> += dlen;00524 00525 soc-><a class="code" href="structtcb.html#m7">myflags</a> = TCP_FLAG_ACK | TCP_FLAG_PUSH;00526 <a class="code" href="tcp_8c.html#a15">process_tcp_out</a>(sockethandle, buf - MIN_TCP_HLEN, blen + MIN_TCP_HLEN + 1, dlen);00527 00528 <span class="keywordflow">return</span>(dlen);00529 }00530 00531 <a name="l00549"></a><a class="code" href="tcp_8c.html#a8">00549</a> INT8 <a class="code" href="tcp_8c.html#a8">tcp_close</a> (INT8 sochandle)00550 {00551 <span class="keyword">struct </span><a class="code" href="structtcb.html">tcb</a>* soc;00552 00553 TCP_DEBUGOUT(<span class="stringliteral">"FUNCTION: tcp_close\r\n"</span>);00554 00555 <span class="keywordflow">if</span>( NO_OF_TCPSOCKETS < 0 )00556 <span class="keywordflow">return</span>(-1);00557 00558 <span class="keywordflow">if</span>( NO_OF_TCPSOCKETS == 0 )00559 <span class="keywordflow">return</span>(-1);00560 00561 <span class="keywordflow">if</span>( sochandle > NO_OF_TCPSOCKETS ) {00562 TCP_DEBUGOUT(<span class="stringliteral">"Socket handle non-valid\r\n"</span>);00563 <span class="keywordflow">return</span>(-1);00564 }00565 00566 <span class="keywordflow">if</span>( sochandle < 0 ) {00567 TCP_DEBUGOUT(<span class="stringliteral">"Socket handle non-valid\r\n"</span>);00568 <span class="keywordflow">return</span>(-1);00569 }00570 00571 soc = &tcp_socket[sochandle]; <span class="comment">/* Get referense */</span> 00572 00573 <span class="keywordflow">switch</span>(soc-><a class="code" href="structtcb.html#m0">state</a>) {00574 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a45">TCP_STATE_LISTENING</a>:00575 <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>);00576 <span class="keywordflow">break</span>;00577 00578 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a46">TCP_STATE_SYN_RECEIVED</a>:00579 soc-><a class="code" href="structtcb.html#m7">myflags</a> = TCP_FLAG_ACK | TCP_FLAG_FIN;00580 soc-><a class="code" href="structtcb.html#m6">send_unacked</a>++;00581 soc-><a class="code" href="structtcb.html#m8">send_next</a>++;00582 <a class="code" href="tcp_8c.html#a16">tcp_sendcontrol</a>(sochandle);00583 <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>);00584 <span class="keywordflow">break</span>;00585 00586 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a47">TCP_STATE_SYN_SENT</a>:00587 00588 <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>);00589 00590 <span class="keywordflow">break</span>;00591 00592 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a48">TCP_STATE_FINW1</a>:00593 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a49">TCP_STATE_FINW2</a>:00594 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a50">TCP_STATE_CLOSING</a>:00595 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a52">TCP_STATE_TIMED_WAIT</a>:00596 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a51">TCP_STATE_LAST_ACK</a>:00597 00598 <span class="comment">/* We are closing already */</span>00599 00600 <span class="keywordflow">break</span>;00601 00602 <span class="keywordflow">case</span> <a class="code" href="tcp__ip_8h.html#a53">TCP_STATE_CONNECTED</a>:00603 00604 <span class="comment">/* Is there unacked data? */</span>00605 00606 <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> ) {00607 <span class="comment">/* There is no unacked data */</span>00608 00609 soc-><a class="code" href="structtcb.html#m7">myflags</a> = TCP_FLAG_ACK | TCP_FLAG_FIN;00610 soc-><a class="code" href="structtcb.html#m8">send_next</a>++;00611 <a class="code" href="tcp_8c.html#a16">tcp_sendcontrol</a>(sochandle);00612 <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>); 00613 } <span class="keywordflow">else</span> {00614 <span class="comment">/* Can't do much but raise pollable flag to soc->flags */</span>00615 <span class="comment">/* and process it on tcp_poll */</span>00616 00617 soc-><a class="code" href="structtcb.html#m2">flags</a> |= TCP_INTFLAGS_CLOSEPENDING;00618 00619 00620 <span class="keywordflow">return</span>(sochandle);00621 }00622 00623 <span class="keywordflow">break</span>;00624 00625 <span class="keywordflow">default</span>:00626 <span class="keywordflow">return</span>(-1);00627 }00628 00629 <span class="keywordflow">return</span>(sochandle);00630 00631 }00632 00633 00634 <a name="l00648"></a><a class="code" href="tcp_8c.html#a9">00648</a> INT8 <a class="code" href="tcp_8c.html#a9">tcp_getstate</a> (INT8 sochandle)00649 {00650 <span class="keyword">struct </span><a class="code" href="structtcb.html">tcb</a>* soc;00651 00652 <span class="keywordflow">if</span>( NO_OF_TCPSOCKETS < 0 )00653 <span class="keywordflow">return</span>(-1);00654 00655 <span class="keywordflow">if</span>( NO_OF_TCPSOCKETS == 0 )00656 <span class="keywordflow">return</span>(-1);00657 00658 <span class="keywordflow">if</span>( sochandle > NO_OF_TCPSOCKETS ) {00659 TCP_DEBUGOUT(<span class="stringliteral">"Socket handle non-valid\r\n"</span>);00660 <span class="keywordflow">return</span>(-1);00661 }00662 00663 <span class="keywordflow">if</span>( sochandle < 0 ) {00664 TCP_DEBUGOUT(<span class="stringliteral">"Socket handle non-valid\r\n"</span>);00665 <span class="keywordflow">return</span>(-1);00666 }00667 00668 soc = &tcp_socket[sochandle]; <span class="comment">/* Get referense */</span> 00669 00670 <span class="keywordflow">return</span>(soc-><a class="code" href="structtcb.html#m0">state</a>);00671 00672 }00673 00674 <a name="l00690"></a><a class="code" href="tcp_8c.html#a10">00690</a> INT16 <a class="code" href="tcp_8c.html#a10">tcp_checksend</a> (INT8 sochandle)00691 {00692 <span class="keyword">struct </span><a class="code" href="structtcb.html">tcb</a>* soc;00693 00694 <span class="keywordflow">if</span>( NO_OF_TCPSOCKETS < 0 )00695 <span class="keywordflow">return</span>(-1);00696 00697 <span class="keywordflow">if</span>( NO_OF_TCPSOCKETS == 0 )00698 <span class="keywordflow">return</span>(-1);00699 00700 <span class="keywordflow">if</span>( sochandle > NO_OF_TCPSOCKETS ) {00701 TCP_DEBUGOUT(<span class="stringliteral">"Socket handle non-valid\r\n"</span>);00702 <span class="keywordflow">return</span>(-1);00703 }00704 00705 soc = &tcp_socket[sochandle]; <span class="comment">/* Get referense */</span> 00706 00707 <span class="keywordflow">if</span>(soc-><a class="code" href="structtcb.html#m0">state</a> != <a class="code" href="tcp__ip_8h.html#a53">TCP_STATE_CONNECTED</a>)00708 <span class="keywordflow">return</span>(-1);00709
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -