⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcp.lst

📁 cs8900 c51应用
💻 LST
📖 第 1 页 / 共 5 页
字号:
 655                  if( NO_OF_TCPSOCKETS == 0 )
 656                          return(-1);
 657                  
 658                  if( sochandle > NO_OF_TCPSOCKETS ) {
 659                          TCP_DEBUGOUT("Socket handle non-valid\r\n");
 660                          return(-1);
 661                  }
 662                  
C51 COMPILER V7.06   TCP                                                                   11/26/2004 11:32:45 PAGE 12  

 663                  if( sochandle < 0 ) {
 664                          TCP_DEBUGOUT("Socket handle non-valid\r\n");
 665                          return(-1);
 666                  }
 667                  
 668                  soc = &tcp_socket[sochandle];           /* Get referense        */      
 669          
 670                  return(soc->state);
 671          
 672          }
 673          
 674          
 675          /** \brief Checks if it's possible to send data using given socket
 676           *  \ingroup tcp_app_api
 677           *      \author 
 678           *              \li Jari Lahti (jari.lahti@violasystems.com)
 679           *      \date 23.07.2002
 680           *      \param sochandle handle to the socket to be inspected
 681           *      \return
 682           *              \li -1 - not possible to send over a socket (previously sent data is
 683           *              still not akcnowledged)
 684           *              \li >0 - it is possible to send data over a socket
 685           *
 686           *      Invoke this function to get information whether it is possible to send
 687           *      data or not. This may, sometimes, be preffered way of getting this type
 688           *      of information to waiting for #TCP_EVENT_ACK in event_listener function.
 689           */
 690          INT16 tcp_checksend (INT8 sochandle)
 691          {
 692                  struct tcb* soc;
 693          
 694                  if( NO_OF_TCPSOCKETS < 0 )
 695                          return(-1);
 696                  
 697                  if( NO_OF_TCPSOCKETS == 0 )
 698                          return(-1);
 699                  
 700                  if( sochandle > NO_OF_TCPSOCKETS ) {
 701                          TCP_DEBUGOUT("Socket handle non-valid\r\n");
 702                          return(-1);
 703                  }
 704                  
 705                  soc = &tcp_socket[sochandle];           /* Get referense        */      
 706                  
 707                  if(soc->state != TCP_STATE_CONNECTED)
 708                          return(-1);
 709          
 710                  if(soc->send_unacked == soc->send_next)
 711                          return(soc->send_mtu);
 712                  
 713                  return(-1);
 714          
 715          
 716          }
 717          
 718          
 719          
 720          /** \brief Reset connection and place socket to closed state
 721           *  \ingroup tcp_app_api
 722           *      \author 
 723           *              \li Jari Lahti (jari.lahti@violasystems.com)
 724           *      \date 21.07.2002
C51 COMPILER V7.06   TCP                                                                   11/26/2004 11:32:45 PAGE 13  

 725           *      \param sochandle handle to socket to be aborted
 726           *      \return
 727           *              \li -1 - error
 728           *              \li >=0 - OK (value represents handle to aborted socket)
 729           *
 730           *      Use this function in cases when TCP connection must be immediately closed.
 731           *      Note that the preffered (more elegant) way of closing the TCP connection
 732           *      is to invoke tcp_close() which starts a proper closing procedure.
 733           *      tcp_abort should be used only in cases when it is really necessary to 
 734           *      immediately and quickly close the connection.
 735           */
 736          INT8 tcp_abort (INT8 sochandle)
 737          {
 738                  struct tcb* soc;
 739                  
 740                  TCP_DEBUGOUT("FUNCTION: tcp_abort\r\n");
 741          
 742                  if( NO_OF_TCPSOCKETS < 0 )
 743                          return(-1);
 744                  
 745                  if( NO_OF_TCPSOCKETS == 0 )
 746                          return(-1);
 747                  
 748                  if( sochandle > NO_OF_TCPSOCKETS ) {
 749                          TCP_DEBUGOUT("Socket handle non-valid\r\n");
 750                          return(-1);
 751                  }
 752                  
 753                  if( sochandle < 0 ) {
 754                          TCP_DEBUGOUT("Socket handle non-valid\r\n");
 755                          return(-1);
 756                  }
 757                  
 758                  soc = &tcp_socket[sochandle];           /* Get referense        */      
 759          
 760                  switch (soc->state)     {
 761                          case TCP_STATE_FREE:
 762                                  return(-1);
 763                                  
 764                          case TCP_STATE_RESERVED:
 765                          case TCP_STATE_CLOSED:
 766                                  return(sochandle);
 767                          
 768                          case TCP_STATE_TIMED_WAIT:
 769                          case TCP_STATE_LISTENING:
 770                                  tcp_newstate(soc, TCP_STATE_CLOSED);
 771                                  return(sochandle);
 772                          
 773                          case TCP_STATE_SYN_SENT:
 774                          case TCP_STATE_SYN_RECEIVED:
 775                          case TCP_STATE_CONNECTED:
 776                          case TCP_STATE_FINW1:
 777                          case TCP_STATE_FINW2:
 778                          case TCP_STATE_CLOSING:
 779                          case TCP_STATE_LAST_ACK:
 780                          
 781                                  soc->myflags = TCP_FLAG_RESET;
 782                                  tcp_sendcontrol(sochandle);
 783                                  tcp_newstate(soc, TCP_STATE_CLOSED);
 784                                  return(sochandle);
 785                                  
 786                          default:
C51 COMPILER V7.06   TCP                                                                   11/26/2004 11:32:45 PAGE 14  

 787                                  return(-1);
 788                  }
 789                  
 790          
 791          }
 792          
 793          
 794          
 795          /** \brief Poll TCP sockets periodically
 796           *      \ingroup periodic_functions
 797           *      \author 
 798           *              \li Jari Lahti (jari.lahti@violasystems.com)
 799           *      \date 19.07.2002
 800           *      \warning
 801           *              \li This function <b>must be</b> invoked periodically from 
 802           *              the main loop. See main_demo.c for an example.
 803           *
 804           *      This function checks all TCP sockets and performs various actions 
 805           *      if timeouts occur. What kind of action is performed is defined by the
 806           *      state of the TCP socket.
 807           */
 808          void tcp_poll (void)
 809          {
 810                  struct tcb* soc;
 811                  static UINT8 handle = 0;
 812                  UINT8 i;
 813                  INT32 temp;
 814                  UINT8 old_retries;
 815                  
 816                  for(i=0; i < NO_OF_TCPSOCKETS; i++ ) {
 817                          
 818                          if(handle > NO_OF_TCPSOCKETS)
 819                                  handle = 0;
 820          
 821                          soc = &tcp_socket[handle];
 822                          
 823                          switch(soc->state) {
 824                                  case TCP_STATE_FREE:
 825                                  case TCP_STATE_RESERVED:
 826                                  case TCP_STATE_CLOSED:
 827                                  case TCP_STATE_LISTENING:
 828                                          
 829                                          break;
 830                                          
 831                                  case TCP_STATE_CONNECTED:
 832                                  
 833                                          /* In CONNECTED State we have                                   */ 
 834                                          /* something to do only if we have unacked data */
 835                                          /* or if connection has been IDLE too long or   */
 836                                          /* unserved close is isuued by user                             */
 837                                          
 838                                          /*if(soc->send_next > soc->send_unacked)
 839                                                  temp = soc->send_next - soc->send_unacked;
 840                                          else
 841                                                  temp = soc->send_unacked - soc->send_next;
 842                                          */
 843                                          
 844                                          temp = soc->send_next - soc->send_unacked;
 845                                          
 846                                          /* Unserved Close?                      */
 847                                          
 848                                          if(soc->flags & TCP_INTFLAGS_CLOSEPENDING) {
C51 COMPILER V7.06   TCP                                                                   11/26/2004 11:32:45 PAGE 15  

 849                                                  /* Can we send the close now    */
 850                                                  
 851                                                  if(temp == 0) {
 852                                                          soc->myflags = TCP_FLAG_ACK | TCP_FLAG_FIN;
 853                                                          soc->send_next++;
 854                                                          tcp_sendcontrol(handle);
 855                                                          tcp_newstate(soc, TCP_STATE_FINW1);     
 856                                                          soc->flags ^= TCP_INTFLAGS_CLOSEPENDING;
 857                                                          
 858                                                          handle++;
 859                                                          
 860                                                          return;         
 861                                                          
 862                                                  }
 863                                          }
 864                                          
 865                                          /* Socket timeout?                      */
 866                                          
 867                                          if(check_timer(soc->persist_timerh) == 0) {
 868                                          
 869                                                  soc->myflags = TCP_FLAG_ACK | TCP_FLAG_FIN;
 870                                                  soc->send_next++;
 871                                                  tcp_sendcontrol(handle);
 872                                                  tcp_newstate(soc, TCP_STATE_FINW1);     
 873                                                  
 874                                                  /* Inform application   */
 875                                                  
 876                                                  soc->event_listener(handle, TCP_EVENT_CLOSE, soc->rem_ip, soc->remport);
 877                                                  
 878                                                  handle++;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -