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

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

?? tcp.h

?? 包含lwip這個精簡IP協議棧的ucos源代碼.
?? 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一区二区三区免费野_久草精品视频
一本一道久久a久久精品综合蜜臀| 91影院在线观看| 亚洲婷婷在线视频| 日韩欧美高清一区| 91香蕉视频污在线| 国内外成人在线| 丁香桃色午夜亚洲一区二区三区 | 中文字幕一区二区视频| 欧美日韩一区二区在线视频| 成人国产精品免费观看动漫| 美女网站在线免费欧美精品| 亚洲图片欧美色图| 国产精品―色哟哟| 精品99久久久久久| 欧美精品国产精品| 色综合久久久网| 岛国精品在线播放| 国产在线精品不卡| 久国产精品韩国三级视频| 亚洲一区二区在线播放相泽| 国产精品毛片久久久久久| 精品国产免费人成在线观看| 欧美三级三级三级爽爽爽| 91免费看片在线观看| 国产成人免费在线视频| 久久精品999| 久久精品国产999大香线蕉| 亚洲一区二区三区四区不卡| 亚洲精品第1页| 亚洲人123区| 亚洲视频你懂的| 国产区在线观看成人精品| 久久综合九色综合欧美亚洲| 精品久久免费看| 久久综合久久久久88| 日韩欧美一二三四区| 日韩一卡二卡三卡国产欧美| 欧美二区乱c少妇| 欧美精品乱码久久久久久 | 欧美一区二区三区啪啪| 欧美日韩亚洲综合一区| 91久久精品一区二区二区| 一本色道a无线码一区v| 91久久精品午夜一区二区| 91色婷婷久久久久合中文| 色偷偷成人一区二区三区91| 色呦呦国产精品| 91福利在线观看| 欧美日韩精品一区二区三区四区| 欧美狂野另类xxxxoooo| 欧美一级片在线看| 精品国产欧美一区二区| 久久久美女艺术照精彩视频福利播放| 精品国产免费久久| 欧美国产欧美综合| 1024精品合集| 亚洲午夜在线视频| 久久精品国产77777蜜臀| 国产精一区二区三区| 波多野结衣一区二区三区| 欧洲在线/亚洲| 777色狠狠一区二区三区| 日韩一级大片在线观看| 国产欧美中文在线| 亚洲免费在线电影| 午夜影院久久久| 精品在线免费观看| 豆国产96在线|亚洲| 91精品1区2区| 日韩一区二区电影| 国产精品久久久久久久久图文区| 国产精品一区二区免费不卡| www.66久久| 欧美日韩国产乱码电影| 久久久久久一级片| 一区二区三区中文字幕电影| 奇米四色…亚洲| 成a人片国产精品| 91精品国产综合久久福利| 久久先锋影音av鲁色资源网| 亚洲精品大片www| 国内精品不卡在线| 91免费看`日韩一区二区| 91精品国产综合久久福利| 国产精品色婷婷| 青青青伊人色综合久久| 成人激情电影免费在线观看| 欧美日韩精品高清| 国产亚洲女人久久久久毛片| 亚洲一区二区成人在线观看| 激情综合五月婷婷| 日本电影亚洲天堂一区| 久久久国产精品午夜一区ai换脸| 亚洲综合色婷婷| 国产精品亚洲午夜一区二区三区 | 色综合久久99| 久久久久久免费网| 午夜av电影一区| a4yy欧美一区二区三区| 精品久久国产字幕高潮| 一区二区欧美国产| 国产成人av一区二区三区在线观看| 色老汉av一区二区三区| 2021国产精品久久精品| 不卡区在线中文字幕| 日韩亚洲电影在线| 亚洲自拍偷拍欧美| 白白色 亚洲乱淫| 久久综合九色综合欧美亚洲| 日韩精品91亚洲二区在线观看| 色综合久久天天综合网| 国产精品少妇自拍| 国产传媒久久文化传媒| 欧美一区三区四区| 1024成人网色www| 懂色av一区二区夜夜嗨| 久久中文娱乐网| 久久爱www久久做| 欧美丰满少妇xxxbbb| 亚洲欧洲av色图| 北条麻妃国产九九精品视频| 久久精品欧美一区二区三区不卡 | www国产精品av| 秋霞影院一区二区| 欧美一级片在线观看| 天天色天天操综合| 在线免费观看视频一区| 亚洲靠逼com| 一本久久综合亚洲鲁鲁五月天 | 91视频在线看| 亚洲日穴在线视频| 97久久精品人人做人人爽50路| 欧美国产乱子伦| 不卡在线观看av| 中文字幕在线不卡| 99re热视频精品| 亚洲欧美激情小说另类| 日本道免费精品一区二区三区| 一区二区三区四区中文字幕| 91成人免费网站| 亚洲成av人综合在线观看| 欧美高清视频在线高清观看mv色露露十八| 亚洲国产综合91精品麻豆| 欧美视频在线播放| 香蕉乱码成人久久天堂爱免费| 欧美浪妇xxxx高跟鞋交| 日本亚洲电影天堂| 久久伊人中文字幕| 成人网男人的天堂| 综合久久久久久| 欧美视频在线一区| 日韩电影在线免费| 久久亚洲一区二区三区明星换脸| 国产成人精品一区二| 亚洲图片另类小说| 欧美日韩成人综合| 国产在线视频不卡二| 国产精品美日韩| 在线观看av一区二区| 日本亚洲天堂网| 久久久国产午夜精品| 色婷婷av久久久久久久| 日本成人在线不卡视频| 国产三级精品视频| 91极品美女在线| 精油按摩中文字幕久久| 国产精品剧情在线亚洲| 在线观看日韩精品| 美腿丝袜亚洲一区| 中文字幕一区二区三区精华液 | 亚洲中国最大av网站| 日韩亚洲欧美中文三级| 国产a级毛片一区| 一区二区三区精品视频| 精品久久久久一区二区国产| 成人国产一区二区三区精品| 亚洲一区二区高清| 欧美v亚洲v综合ⅴ国产v| 99精品桃花视频在线观看| 午夜伊人狠狠久久| 国产精品嫩草99a| 91麻豆精品国产91久久久更新时间 | 精品国产亚洲一区二区三区在线观看| 成人动漫一区二区| 日韩精品色哟哟| 一区视频在线播放| 日韩视频一区二区在线观看| www.在线欧美| 麻豆国产精品777777在线| 亚洲色图视频免费播放| 精品播放一区二区| 欧美日韩在线观看一区二区| 国产99精品在线观看| 蜜臀av一区二区在线观看| 亚洲美女在线一区| 国产欧美一区二区精品久导航 | 麻豆91在线播放| 亚洲男人都懂的| 国产日韩欧美制服另类| 欧美xxxxx牲另类人与|