亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tcp.h

?? STR71X源代碼包括例程與各功能的源代碼
?? H
?? 第 1 頁 / 共 2 頁
字號:
  /* sender variables */
  u32_t snd_nxt,       /* next seqno to be sent */
    snd_max,       /* Highest seqno sent. */
    snd_wnd,       /* sender window */
    snd_wl1, snd_wl2, /* Sequence and acknowledgement numbers of last
       window update. */
    snd_lbb;       /* Sequence number of next byte to be buffered. */

  u16_t acked;
  
  u16_t snd_buf;   /* Available buffer space for sending (in bytes). */
  u8_t snd_queuelen; /* Available buffer space for sending (in tcp_segs). */
  
  
  /* These are ordered by sequence number: */
  struct tcp_seg *unsent;   /* Unsent (queued) segments. */
  struct tcp_seg *unacked;  /* Sent but unacknowledged segments. */
#if TCP_QUEUE_OOSEQ  
  struct tcp_seg *ooseq;    /* Received out of sequence segments. */
#endif /* TCP_QUEUE_OOSEQ */

#if LWIP_CALLBACK_API
  /* Function to be called when more send buffer space is available. */
  err_t (* sent)(void *arg, struct tcp_pcb *pcb, u16_t space);
  
  /* Function to be called when (in-sequence) data has arrived. */
  err_t (* recv)(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err);

  /* Function to be called when a connection has been set up. */
  err_t (* connected)(void *arg, struct tcp_pcb *pcb, err_t err);

  /* Function to call when a listener has been connected. */
  err_t (* accept)(void *arg, struct tcp_pcb *newpcb, err_t err);

  /* Function which is called periodically. */
  err_t (* poll)(void *arg, struct tcp_pcb *pcb);

  /* Function to be called whenever a fatal error occurs. */
  void (* errf)(void *arg, err_t err);
#endif /* LWIP_CALLBACK_API */

  /* idle time before KEEPALIVE is sent */
  u32_t keepalive;
  
  /* KEEPALIVE counter */
  u8_t keep_cnt;
};

struct tcp_pcb_listen {  
/* Common members of all PCB types */
  IP_PCB;

/* Protocol specific PCB members */
  struct tcp_pcb_listen *next;   /* for the linked list */
  
  /* Even if state is obviously LISTEN this is here for
   * field compatibility with tpc_pcb to which it is cast sometimes
   * Until a cleaner solution emerges this is here.FIXME
   */ 
  enum tcp_state state;   /* TCP state */

  u8_t prio;
  void *callback_arg;
  
  u16_t local_port; 

#if LWIP_CALLBACK_API
  /* Function to call when a listener has been connected. */
  err_t (* accept)(void *arg, struct tcp_pcb *newpcb, err_t err);
#endif /* LWIP_CALLBACK_API */
};

#if LWIP_EVENT_API

enum lwip_event {
  LWIP_EVENT_ACCEPT,
  LWIP_EVENT_SENT,
  LWIP_EVENT_RECV,
  LWIP_EVENT_CONNECTED,
  LWIP_EVENT_POLL,
  LWIP_EVENT_ERR
};

err_t lwip_tcp_event(void *arg, struct tcp_pcb *pcb,
         enum lwip_event,
         struct pbuf *p,
         u16_t size,
         err_t err);

#define TCP_EVENT_ACCEPT(pcb,err,ret)    ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\
                LWIP_EVENT_ACCEPT, NULL, 0, err)
#define TCP_EVENT_SENT(pcb,space,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\
                   LWIP_EVENT_SENT, NULL, space, ERR_OK)
#define TCP_EVENT_RECV(pcb,p,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\
                LWIP_EVENT_RECV, (p), 0, (err))
#define TCP_EVENT_CONNECTED(pcb,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\
                LWIP_EVENT_CONNECTED, NULL, 0, (err))
#define TCP_EVENT_POLL(pcb,ret)       ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\
                LWIP_EVENT_POLL, NULL, 0, ERR_OK)
#define TCP_EVENT_ERR(errf,arg,err)  lwip_tcp_event((arg), NULL, \
                LWIP_EVENT_ERR, NULL, 0, (err))
#else /* LWIP_EVENT_API */
#define TCP_EVENT_ACCEPT(pcb,err,ret)     \
                        if((pcb)->accept != NULL) \
                        (ret = (pcb)->accept((pcb)->callback_arg,(pcb),(err)))
#define TCP_EVENT_SENT(pcb,space,ret) \
                        if((pcb)->sent != NULL) \
                        (ret = (pcb)->sent((pcb)->callback_arg,(pcb),(space)))
#define TCP_EVENT_RECV(pcb,p,err,ret) \
                        if((pcb)->recv != NULL) \
                        { ret = (pcb)->recv((pcb)->callback_arg,(pcb),(p),(err)); } else { \
                          if (p) pbuf_free(p); }
#define TCP_EVENT_CONNECTED(pcb,err,ret) \
                        if((pcb)->connected != NULL) \
                        (ret = (pcb)->connected((pcb)->callback_arg,(pcb),(err)))
#define TCP_EVENT_POLL(pcb,ret) \
                        if((pcb)->poll != NULL) \
                        (ret = (pcb)->poll((pcb)->callback_arg,(pcb)))
#define TCP_EVENT_ERR(errf,arg,err) \
                        if((errf) != NULL) \
                        (errf)((arg),(err))
#endif /* LWIP_EVENT_API */

/* This structure represents a TCP segment on the unsent and unacked queues */
struct tcp_seg {
  struct tcp_seg *next;    /* used when putting segements on a queue */
  struct pbuf *p;          /* buffer containing data + TCP header */
  void *dataptr;           /* pointer to the TCP data in the pbuf */
  u16_t len;               /* the TCP length of this segment */
  struct tcp_hdr *tcphdr;  /* the TCP header */
};

/* Internal functions and global variables: */
struct tcp_pcb *tcp_pcb_copy(struct tcp_pcb *pcb);
void tcp_pcb_purge(struct tcp_pcb *pcb);
void tcp_pcb_remove(struct tcp_pcb **pcblist, struct tcp_pcb *pcb);

u8_t tcp_segs_free(struct tcp_seg *seg);
u8_t tcp_seg_free(struct tcp_seg *seg);
struct tcp_seg *tcp_seg_copy(struct tcp_seg *seg);

#define tcp_ack(pcb)     if((pcb)->flags & TF_ACK_DELAY) { \
                            (pcb)->flags &= ~TF_ACK_DELAY; \
                            (pcb)->flags |= TF_ACK_NOW; \
                            tcp_output(pcb); \
                         } else { \
                            (pcb)->flags |= TF_ACK_DELAY; \
                         }

#define tcp_ack_now(pcb) (pcb)->flags |= TF_ACK_NOW; \
                         tcp_output(pcb)

err_t tcp_send_ctrl(struct tcp_pcb *pcb, u8_t flags);
err_t tcp_enqueue(struct tcp_pcb *pcb, void *dataptr, u16_t len,
    u8_t flags, u8_t copy,
                u8_t *optdata, u8_t optlen);

void tcp_rexmit_seg(struct tcp_pcb *pcb, struct tcp_seg *seg);

void tcp_rst(u32_t seqno, u32_t ackno,
       struct ip_addr *local_ip, struct ip_addr *remote_ip,
       u16_t local_port, u16_t remote_port);

u32_t tcp_next_iss(void);

void tcp_keepalive(struct tcp_pcb *pcb);

extern struct tcp_pcb *tcp_input_pcb;
extern u32_t tcp_ticks;

#if TCP_DEBUG || TCP_INPUT_DEBUG || TCP_OUTPUT_DEBUG
void tcp_debug_print(struct tcp_hdr *tcphdr);
void tcp_debug_print_flags(u8_t flags);
void tcp_debug_print_state(enum tcp_state s);
void tcp_debug_print_pcbs(void);
int tcp_pcbs_sane(void);
#else
#  define tcp_debug_print(tcphdr)
#  define tcp_debug_print_flags(flags)
#  define tcp_debug_print_state(s)
#  define tcp_debug_print_pcbs()
#  define tcp_pcbs_sane() 1
#endif /* TCP_DEBUG */

#if NO_SYS
#define tcp_timer_needed()
#else
void tcp_timer_needed(void);
#endif

/* The TCP PCB lists. */
union tcp_listen_pcbs_t { /* List of all TCP PCBs in LISTEN state. */
	struct tcp_pcb_listen *listen_pcbs; 
	struct tcp_pcb *pcbs;
};
extern union tcp_listen_pcbs_t tcp_listen_pcbs;
extern struct tcp_pcb *tcp_active_pcbs;  /* List of all TCP PCBs that are in a
              state in which they accept or send
              data. */
extern struct tcp_pcb *tcp_tw_pcbs;      /* List of all TCP PCBs in TIME-WAIT. */

extern struct tcp_pcb *tcp_tmp_pcb;      /* Only used for temporary storage. */

/* Axioms about the above lists:   
   1) Every TCP PCB that is not CLOSED is in one of the lists.
   2) A PCB is only in one of the lists.
   3) All PCBs in the tcp_listen_pcbs list is in LISTEN state.
   4) All PCBs in the tcp_tw_pcbs list is in TIME-WAIT state.
*/

/* Define two macros, TCP_REG and TCP_RMV that registers a TCP PCB
   with a PCB list or removes a PCB from a list, respectively. */
#if 0
#define TCP_REG(pcbs, npcb) do {\
                            LWIP_DEBUGF(TCP_DEBUG, ("TCP_REG %p local port %d\n", npcb, npcb->local_port)); \
                            for(tcp_tmp_pcb = *pcbs; \
          tcp_tmp_pcb != NULL; \
        tcp_tmp_pcb = tcp_tmp_pcb->next) { \
                                LWIP_ASSERT("TCP_REG: already registered\n", tcp_tmp_pcb != npcb); \
                            } \
                            LWIP_ASSERT("TCP_REG: pcb->state != CLOSED", npcb->state != CLOSED); \
                            npcb->next = *pcbs; \
                            LWIP_ASSERT("TCP_REG: npcb->next != npcb", npcb->next != npcb); \
                            *(pcbs) = npcb; \
                            LWIP_ASSERT("TCP_RMV: tcp_pcbs sane", tcp_pcbs_sane()); \
              tcp_timer_needed(); \
                            } while(0)
#define TCP_RMV(pcbs, npcb) do { \
                            LWIP_ASSERT("TCP_RMV: pcbs != NULL", *pcbs != NULL); \
                            LWIP_DEBUGF(TCP_DEBUG, ("TCP_RMV: removing %p from %p\n", npcb, *pcbs)); \
                            if(*pcbs == npcb) { \
                               *pcbs = (*pcbs)->next; \
                            } else for(tcp_tmp_pcb = *pcbs; tcp_tmp_pcb != NULL; tcp_tmp_pcb = tcp_tmp_pcb->next) { \
                               if(tcp_tmp_pcb->next != NULL && tcp_tmp_pcb->next == npcb) { \
                                  tcp_tmp_pcb->next = npcb->next; \
                                  break; \
                               } \
                            } \
                            npcb->next = NULL; \
                            LWIP_ASSERT("TCP_RMV: tcp_pcbs sane", tcp_pcbs_sane()); \
                            LWIP_DEBUGF(TCP_DEBUG, ("TCP_RMV: removed %p from %p\n", npcb, *pcbs)); \
                            } while(0)

#else /* LWIP_DEBUG */
#define TCP_REG(pcbs, npcb) do { \
                            npcb->next = *pcbs; \
                            *(pcbs) = npcb; \
              tcp_timer_needed(); \
                            } while(0)
#define TCP_RMV(pcbs, npcb) do { \
                            if(*(pcbs) == npcb) { \
                               (*(pcbs)) = (*pcbs)->next; \
                            } else for(tcp_tmp_pcb = *pcbs; tcp_tmp_pcb != NULL; tcp_tmp_pcb = tcp_tmp_pcb->next) { \
                               if(tcp_tmp_pcb->next != NULL && tcp_tmp_pcb->next == npcb) { \
                                  tcp_tmp_pcb->next = npcb->next; \
                                  break; \
                               } \
                            } \
                            npcb->next = NULL; \
                            } while(0)
#endif /* LWIP_DEBUG */
#endif /* __LWIP_TCP_H__ */



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美色图免费看| 丰满放荡岳乱妇91ww| 国产三级一区二区三区| 成人一区二区三区中文字幕| 亚洲午夜视频在线观看| 一本一本久久a久久精品综合麻豆| 日本成人在线看| 久久福利视频一区二区| 久久国产精品第一页| 国产成人免费在线观看不卡| 成人国产视频在线观看| 欧美大片拔萝卜| 欧美一卡二卡三卡| 久久精品噜噜噜成人88aⅴ| 99精品偷自拍| 中文字幕亚洲区| 麻豆成人综合网| 日韩午夜激情av| 奇米色777欧美一区二区| 蓝色福利精品导航| 日韩欧美中文字幕精品| 欧美成人一区二区三区在线观看 | 色伊人久久综合中文字幕| 极品少妇xxxx偷拍精品少妇| 国产91丝袜在线播放| 中文字幕免费一区| 欧美在线播放高清精品| 激情av综合网| 一区二区三区精品视频| 日韩欧美卡一卡二| 94色蜜桃网一区二区三区| 欧美亚洲动漫制服丝袜| 欧美在线播放高清精品| 肉色丝袜一区二区| 国产精品亚洲视频| 欧美自拍偷拍一区| 国产精品国模大尺度视频| 亚洲国产成人av| 国产精品一区二区不卡| 精品88久久久久88久久久| 亚洲成av人影院在线观看网| jlzzjlzz国产精品久久| 久久综合色鬼综合色| 免费三级欧美电影| 欧美日韩精品一区二区三区蜜桃| 亚洲图片另类小说| 波多野结衣在线一区| 中文字幕不卡一区| 成人免费高清视频在线观看| 国产精品网曝门| 韩国女主播一区| 26uuu另类欧美亚洲曰本| 另类中文字幕网| 日韩一级片在线观看| 日韩精品电影一区亚洲| 久久久不卡影院| 678五月天丁香亚洲综合网| 亚洲欧美激情插| 亚洲国产中文字幕在线视频综合| 极品少妇xxxx精品少妇偷拍| 日韩欧美中文字幕公布| 91免费国产在线| 欧美日韩国产高清一区| 91成人看片片| 中文一区在线播放| 精品久久久久av影院| 91麻豆精品国产91久久久资源速度 | 五月天亚洲婷婷| 又紧又大又爽精品一区二区| 欧美韩国日本不卡| 国产精品无遮挡| 成人午夜在线视频| 亚洲韩国一区二区三区| 日韩丝袜情趣美女图片| 成人国产电影网| 精品一区二区三区在线播放| 国产女主播视频一区二区| 91色porny蝌蚪| 久久精品久久综合| 亚洲第一福利一区| 国产亚洲一区字幕| 欧美剧在线免费观看网站| 国产在线精品免费| 日日骚欧美日韩| 亚洲色图第一区| 久久久久久久久久久久久久久99| 91麻豆精品视频| 国产91富婆露脸刺激对白| 日韩影院在线观看| 一级特黄大欧美久久久| 18涩涩午夜精品.www| 久久蜜桃av一区精品变态类天堂| 欧美视频一区二区在线观看| 91色|porny| 色久综合一二码| 国产精品一二三区在线| 久久成人精品无人区| 久久99热国产| 久久精品国产亚洲aⅴ| 国产大片一区二区| 亚洲欧美影音先锋| 欧美mv和日韩mv的网站| 日本一区二区免费在线| 成人免费毛片片v| 黄色成人免费在线| 一区二区三区毛片| 日韩精品一卡二卡三卡四卡无卡| 丝袜脚交一区二区| 国产麻豆精品theporn| 91美女视频网站| 欧美一区二区三区四区视频| 久久久久久久久免费| 亚洲视频免费看| 蜜臀av一级做a爰片久久| 国产高清久久久久| 色哟哟一区二区三区| 99re在线精品| 欧美顶级少妇做爰| 久久综合九色综合欧美98| 久久久www免费人成精品| 亚洲天堂久久久久久久| 韩国av一区二区三区| 成人亚洲精品久久久久软件| 国产精品一品视频| 在线电影国产精品| 2017欧美狠狠色| 亚洲福利视频三区| 成人午夜免费av| 这里只有精品电影| 亚洲免费av在线| 韩国毛片一区二区三区| 欧洲人成人精品| 国产女主播一区| 精品无人区卡一卡二卡三乱码免费卡| 色成年激情久久综合| 精品国产百合女同互慰| 一二三区精品福利视频| 国内国产精品久久| 91精品婷婷国产综合久久性色| 亚洲激情六月丁香| 国产伦精品一区二区三区在线观看 | 国产午夜精品理论片a级大结局| 久久99久久99| 日韩精品专区在线影院重磅| 奇米精品一区二区三区在线观看| 亚洲一区在线视频| 亚洲自拍偷拍综合| 日韩一区二区在线看| 日韩小视频在线观看专区| 成人免费毛片高清视频| 日韩av中文字幕一区二区三区| 成人97人人超碰人人99| 日韩一区二区视频在线观看| 亚洲欧美在线aaa| 国产一区二区伦理| 国产精品一区二区x88av| 欧美三级一区二区| 亚洲精品免费一二三区| 国产一区二区伦理片| 欧美精品一区二区三区视频 | 久久―日本道色综合久久| 日韩毛片在线免费观看| 日本精品视频一区二区| 亚洲国产视频在线| 欧美午夜精品久久久久久孕妇| 亚洲欧美视频一区| 精品视频999| 国产精品123区| 中文在线一区二区| 精品中文字幕一区二区| 日韩欧美国产电影| 成人免费视频一区二区| 亚洲欧洲成人自拍| 一本色道久久综合亚洲91| 一区二区三区在线视频观看58| 欧美精品123区| 国产中文字幕精品| 国产精品久久久久久久岛一牛影视| 国产在线播放一区三区四| 亚洲图片另类小说| 欧美日韩综合在线免费观看| 日韩av电影免费观看高清完整版| 欧美男女性生活在线直播观看| 午夜久久电影网| 久久婷婷国产综合精品青草 | 国产精品美女久久久久aⅴ| caoporen国产精品视频| 国产精品久久午夜夜伦鲁鲁| 精品免费国产一区二区三区四区| 91丨porny丨国产入口| 国产做a爰片久久毛片| 亚洲主播在线观看| 国产精品美女久久久久aⅴ | 精品国产青草久久久久福利| 国产精品一区二区久久精品爱涩| 美女视频一区二区三区| 国产成人av一区二区三区在线| 日韩精品中午字幕| 亚洲777理论| 2021久久国产精品不只是精品|