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

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

?? tcp_out.c

?? stm32+ucos-ii
?? C
?? 第 1 頁 / 共 3 頁
字號:
  seg->tcphdr->wnd = htons(pcb->rcv_ann_wnd);

  pcb->rcv_ann_right_edge = pcb->rcv_nxt + pcb->rcv_ann_wnd;

  /* Add any requested options.  NB MSS option is only set on SYN
     packets, so ignore it here */
  opts = (u32_t *)(seg->tcphdr + 1);
  if (seg->flags & TF_SEG_OPTS_MSS) {
    TCP_BUILD_MSS_OPTION(*opts);
    opts += 1;
  }
#if LWIP_TCP_TIMESTAMPS
  pcb->ts_lastacksent = pcb->rcv_nxt;

  if (seg->flags & TF_SEG_OPTS_TS) {
    tcp_build_timestamp_option(pcb, opts);
    opts += 3;
  }
#endif

  /* If we don't have a local IP address, we get one by
     calling ip_route(). */
  if (ip_addr_isany(&(pcb->local_ip))) {
    netif = ip_route(&(pcb->remote_ip));
    if (netif == NULL) {
      return;
    }
    ip_addr_set(&(pcb->local_ip), &(netif->ip_addr));
  }

  /* Set retransmission timer running if it is not currently enabled */
  if(pcb->rtime == -1)
    pcb->rtime = 0;

  if (pcb->rttest == 0) {
    pcb->rttest = tcp_ticks;
    pcb->rtseq = ntohl(seg->tcphdr->seqno);

    LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_output_segment: rtseq %"U32_F"\n", pcb->rtseq));
  }
  LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output_segment: %"U32_F":%"U32_F"\n",
          htonl(seg->tcphdr->seqno), htonl(seg->tcphdr->seqno) +
          seg->len));

  len = (u16_t)((u8_t *)seg->tcphdr - (u8_t *)seg->p->payload);

  seg->p->len -= len;
  seg->p->tot_len -= len;

  seg->p->payload = seg->tcphdr;

  seg->tcphdr->chksum = 0;
#if CHECKSUM_GEN_TCP
  seg->tcphdr->chksum = inet_chksum_pseudo(seg->p,
             &(pcb->local_ip),
             &(pcb->remote_ip),
             IP_PROTO_TCP, seg->p->tot_len);
#endif
  TCP_STATS_INC(tcp.xmit);

#if LWIP_NETIF_HWADDRHINT
  ip_output_hinted(seg->p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos,
      IP_PROTO_TCP, &(pcb->addr_hint));
#else /* LWIP_NETIF_HWADDRHINT*/
  ip_output(seg->p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos,
      IP_PROTO_TCP);
#endif /* LWIP_NETIF_HWADDRHINT*/
}

/**
 * Send a TCP RESET packet (empty segment with RST flag set) either to
 * abort a connection or to show that there is no matching local connection
 * for a received segment.
 *
 * Called by tcp_abort() (to abort a local connection), tcp_input() (if no
 * matching local pcb was found), tcp_listen_input() (if incoming segment
 * has ACK flag set) and tcp_process() (received segment in the wrong state)
 *
 * Since a RST segment is in most cases not sent for an active connection,
 * tcp_rst() has a number of arguments that are taken from a tcp_pcb for
 * most other segment output functions.
 *
 * @param seqno the sequence number to use for the outgoing segment
 * @param ackno the acknowledge number to use for the outgoing segment
 * @param local_ip the local IP address to send the segment from
 * @param remote_ip the remote IP address to send the segment to
 * @param local_port the local TCP port to send the segment from
 * @param remote_port the remote TCP port to send the segment to
 */
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)
{
  struct pbuf *p;
  struct tcp_hdr *tcphdr;
  p = pbuf_alloc(PBUF_IP, TCP_HLEN, PBUF_RAM);
  if (p == NULL) {
      LWIP_DEBUGF(TCP_DEBUG, ("tcp_rst: could not allocate memory for pbuf\n"));
      return;
  }
  LWIP_ASSERT("check that first pbuf can hold struct tcp_hdr",
              (p->len >= sizeof(struct tcp_hdr)));

  tcphdr = p->payload;
  tcphdr->src = htons(local_port);
  tcphdr->dest = htons(remote_port);
  tcphdr->seqno = htonl(seqno);
  tcphdr->ackno = htonl(ackno);
  TCPH_FLAGS_SET(tcphdr, TCP_RST | TCP_ACK);
  tcphdr->wnd = htons(TCP_WND);
  tcphdr->urgp = 0;
  TCPH_HDRLEN_SET(tcphdr, 5);

  tcphdr->chksum = 0;
#if CHECKSUM_GEN_TCP
  tcphdr->chksum = inet_chksum_pseudo(p, local_ip, remote_ip,
              IP_PROTO_TCP, p->tot_len);
#endif
  TCP_STATS_INC(tcp.xmit);
  snmp_inc_tcpoutrsts();
   /* Send output with hardcoded TTL since we have no access to the pcb */
  ip_output(p, local_ip, remote_ip, TCP_TTL, 0, IP_PROTO_TCP);
  pbuf_free(p);
  LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_rst: seqno %"U32_F" ackno %"U32_F".\n", seqno, ackno));
}

/**
 * Requeue all unacked segments for retransmission
 *
 * Called by tcp_slowtmr() for slow retransmission.
 *
 * @param pcb the tcp_pcb for which to re-enqueue all unacked segments
 */
void
tcp_rexmit_rto(struct tcp_pcb *pcb)
{
  struct tcp_seg *seg;

  if (pcb->unacked == NULL) {
    return;
  }

  /* Move all unacked segments to the head of the unsent queue */
  for (seg = pcb->unacked; seg->next != NULL; seg = seg->next);
  /* concatenate unsent queue after unacked queue */
  seg->next = pcb->unsent;
  /* unsent queue is the concatenated queue (of unacked, unsent) */
  pcb->unsent = pcb->unacked;
  /* unacked queue is now empty */
  pcb->unacked = NULL;

  /* increment number of retransmissions */
  ++pcb->nrtx;

  /* Don't take any RTT measurements after retransmitting. */
  pcb->rttest = 0;

  /* Do the actual retransmission */
  tcp_output(pcb);
}

/**
 * Requeue the first unacked segment for retransmission
 *
 * Called by tcp_receive() for fast retramsmit.
 *
 * @param pcb the tcp_pcb for which to retransmit the first unacked segment
 */
void
tcp_rexmit(struct tcp_pcb *pcb)
{
  struct tcp_seg *seg;
  struct tcp_seg **cur_seg;

  if (pcb->unacked == NULL) {
    return;
  }

  /* Move the first unacked segment to the unsent queue */
  /* Keep the unsent queue sorted. */
  seg = pcb->unacked;
  pcb->unacked = seg->next;

  cur_seg = &(pcb->unsent);
  while (*cur_seg &&
    TCP_SEQ_LT(ntohl((*cur_seg)->tcphdr->seqno), ntohl(seg->tcphdr->seqno))) {
      cur_seg = &((*cur_seg)->next );
  }
  seg->next = *cur_seg;
  *cur_seg = seg;

  ++pcb->nrtx;

  /* Don't take any rtt measurements after retransmitting. */
  pcb->rttest = 0;

  /* Do the actual retransmission. */
  snmp_inc_tcpretranssegs();
  tcp_output(pcb);
}

/**
 * Send keepalive packets to keep a connection active although
 * no data is sent over it.
 *
 * Called by tcp_slowtmr()
 *
 * @param pcb the tcp_pcb for which to send a keepalive packet
 */
void
tcp_keepalive(struct tcp_pcb *pcb)
{
  struct pbuf *p;
  struct tcp_hdr *tcphdr;

  LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: sending KEEPALIVE probe to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n",
                          ip4_addr1(&pcb->remote_ip), ip4_addr2(&pcb->remote_ip),
                          ip4_addr3(&pcb->remote_ip), ip4_addr4(&pcb->remote_ip)));

  LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: tcp_ticks %"U32_F"   pcb->tmr %"U32_F" pcb->keep_cnt_sent %"U16_F"\n", 
                          tcp_ticks, pcb->tmr, pcb->keep_cnt_sent));
   
  p = pbuf_alloc(PBUF_IP, TCP_HLEN, PBUF_RAM);
   
  if(p == NULL) {
    LWIP_DEBUGF(TCP_DEBUG, 
                ("tcp_keepalive: could not allocate memory for pbuf\n"));
    return;
  }
  LWIP_ASSERT("check that first pbuf can hold struct tcp_hdr",
              (p->len >= sizeof(struct tcp_hdr)));

  tcphdr = tcp_output_set_header(pcb, p, 0, htonl(pcb->snd_nxt - 1));

#if CHECKSUM_GEN_TCP
  tcphdr->chksum = inet_chksum_pseudo(p, &pcb->local_ip, &pcb->remote_ip,
                                      IP_PROTO_TCP, p->tot_len);
#endif
  TCP_STATS_INC(tcp.xmit);

  /* Send output to IP */
#if LWIP_NETIF_HWADDRHINT
  ip_output_hinted(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP,
    &(pcb->addr_hint));
#else /* LWIP_NETIF_HWADDRHINT*/
  ip_output(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP);
#endif /* LWIP_NETIF_HWADDRHINT*/

  pbuf_free(p);

  LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: seqno %"U32_F" ackno %"U32_F".\n",
                          pcb->snd_nxt - 1, pcb->rcv_nxt));
}


/**
 * Send persist timer zero-window probes to keep a connection active
 * when a window update is lost.
 *
 * Called by tcp_slowtmr()
 *
 * @param pcb the tcp_pcb for which to send a zero-window probe packet
 */
void
tcp_zero_window_probe(struct tcp_pcb *pcb)
{
  struct pbuf *p;
  struct tcp_hdr *tcphdr;
  struct tcp_seg *seg;

  LWIP_DEBUGF(TCP_DEBUG, 
              ("tcp_zero_window_probe: sending ZERO WINDOW probe to %"
               U16_F".%"U16_F".%"U16_F".%"U16_F"\n",
               ip4_addr1(&pcb->remote_ip), ip4_addr2(&pcb->remote_ip),
               ip4_addr3(&pcb->remote_ip), ip4_addr4(&pcb->remote_ip)));

  LWIP_DEBUGF(TCP_DEBUG, 
              ("tcp_zero_window_probe: tcp_ticks %"U32_F
               "   pcb->tmr %"U32_F" pcb->keep_cnt_sent %"U16_F"\n", 
               tcp_ticks, pcb->tmr, pcb->keep_cnt_sent));

  seg = pcb->unacked;

  if(seg == NULL)
    seg = pcb->unsent;

  if(seg == NULL)
    return;

  p = pbuf_alloc(PBUF_IP, TCP_HLEN + 1, PBUF_RAM);
   
  if(p == NULL) {
    LWIP_DEBUGF(TCP_DEBUG, ("tcp_zero_window_probe: no memory for pbuf\n"));
    return;
  }
  LWIP_ASSERT("check that first pbuf can hold struct tcp_hdr",
              (p->len >= sizeof(struct tcp_hdr)));

  tcphdr = tcp_output_set_header(pcb, p, 0, seg->tcphdr->seqno);

  /* Copy in one byte from the head of the unacked queue */
  *((char *)p->payload + sizeof(struct tcp_hdr)) = *(char *)seg->dataptr;

#if CHECKSUM_GEN_TCP
  tcphdr->chksum = inet_chksum_pseudo(p, &pcb->local_ip, &pcb->remote_ip,
                                      IP_PROTO_TCP, p->tot_len);
#endif
  TCP_STATS_INC(tcp.xmit);

  /* Send output to IP */
#if LWIP_NETIF_HWADDRHINT
  ip_output_hinted(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP,
    &(pcb->addr_hint));
#else /* LWIP_NETIF_HWADDRHINT*/
  ip_output(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP);
#endif /* LWIP_NETIF_HWADDRHINT*/

  pbuf_free(p);

  LWIP_DEBUGF(TCP_DEBUG, ("tcp_zero_window_probe: seqno %"U32_F
                          " ackno %"U32_F".\n",
                          pcb->snd_nxt - 1, pcb->rcv_nxt));
}
#endif /* LWIP_TCP */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲男人的天堂一区二区| 久久精品一区二区| 在线欧美一区二区| 91老师片黄在线观看| 99re66热这里只有精品3直播 | 欧美v亚洲v综合ⅴ国产v| 91麻豆精品国产91久久久使用方法 | 韩国女主播成人在线观看| 国产成人亚洲综合色影视| 精品在线播放免费| 韩国一区二区三区| 成人国产免费视频| 在线国产亚洲欧美| 欧美久久久一区| 欧美xxx久久| 国产精品久久久久婷婷二区次| 亚洲国产成人自拍| 亚洲欧美日韩人成在线播放| 亚洲自拍另类综合| 麻豆高清免费国产一区| 成人一区二区三区视频在线观看| 99久久综合精品| 911精品国产一区二区在线| 精品国内片67194| 亚洲人精品午夜| 五月天亚洲精品| 国产不卡视频一区二区三区| 在线视频国内一区二区| 日韩欧美成人一区二区| 亚洲婷婷在线视频| 精品一区二区影视| 欧美最猛黑人xxxxx猛交| 久久亚洲一级片| 亚洲成人免费视频| 成人一区二区三区在线观看| 欧美日韩国产精选| 国产女人18水真多18精品一级做| 亚洲一线二线三线视频| 国产大片一区二区| 日韩亚洲欧美成人一区| **性色生活片久久毛片| 精品一区二区久久| 欧美久久婷婷综合色| 亚洲色图制服诱惑| 极品少妇xxxx精品少妇偷拍| 欧美视频第二页| 中文字幕日韩一区二区| 狠狠色综合日日| 777奇米四色成人影色区| 国产精品久久久久久久久免费丝袜| 美女视频免费一区| 欧美精品一卡二卡| 亚洲视频免费看| 国产不卡高清在线观看视频| 精品精品欲导航| 麻豆一区二区三区| 欧美精品少妇一区二区三区| 一区二区激情视频| 色视频欧美一区二区三区| 国产精品免费视频观看| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 国产精品国产三级国产aⅴ中文 | 99re成人在线| 国产精品第四页| 盗摄精品av一区二区三区| 精品国产一区二区精华| 国内精品第一页| 日韩免费性生活视频播放| 蜜桃视频在线观看一区二区| 777久久久精品| 日本美女视频一区二区| 制服丝袜av成人在线看| 午夜精品久久久| 欧美日韩国产色站一区二区三区| 亚洲国产综合色| 欧美色图一区二区三区| 亚洲妇女屁股眼交7| 欧美色图天堂网| 日韩经典一区二区| 日韩欧美在线不卡| 国产一区二区在线电影| 久久久久成人黄色影片| 国产91清纯白嫩初高中在线观看| 欧美极品美女视频| 日本久久电影网| 婷婷开心激情综合| 欧美成人一区二区三区| 岛国av在线一区| 亚洲精品午夜久久久| 8v天堂国产在线一区二区| 久久av老司机精品网站导航| 久久蜜桃一区二区| 色综合久久中文综合久久97| 亚洲成av人片在线| 久久亚洲免费视频| 97se亚洲国产综合自在线不卡| 亚洲午夜一区二区三区| 欧美精品一区二区三区高清aⅴ| 高清久久久久久| 亚洲成人资源网| 久久久精品影视| 欧美日韩精品一区二区三区 | 国内精品免费在线观看| 国产精品欧美一区喷水| 欧美午夜寂寞影院| 国产精品影视网| 日韩中文字幕区一区有砖一区| 精品国免费一区二区三区| 色欧美乱欧美15图片| 久久精品国产99久久6| 自拍偷在线精品自拍偷无码专区 | 成人深夜在线观看| 亚洲成av人片在线观看无码| 国产三级一区二区三区| 在线观看免费一区| 国产成人日日夜夜| 日本免费在线视频不卡一不卡二| 国产精品久久三| 日韩精品专区在线影院重磅| 色播五月激情综合网| 国产一区二区毛片| 午夜精品爽啪视频| 亚洲品质自拍视频| 国产午夜精品一区二区| 欧美成人三级在线| 欧美日韩国产高清一区二区| 成a人片亚洲日本久久| 国产在线看一区| 人禽交欧美网站| 亚洲国产wwwccc36天堂| 中文字幕一区二区三区四区不卡| 日韩欧美一级精品久久| 欧美午夜精品久久久久久孕妇| 97久久精品人人爽人人爽蜜臀| 国产毛片精品一区| 久久se这里有精品| 麻豆精品视频在线观看| 日产精品久久久久久久性色| 一区二区三区在线视频观看 | 国产一区二区三区免费观看| 日韩精品电影在线| 视频一区二区欧美| 亚洲国产精品一区二区久久 | 欧美精品乱码久久久久久| 91麻豆免费在线观看| 99re这里都是精品| 色呦呦国产精品| 91国偷自产一区二区开放时间 | 不卡免费追剧大全电视剧网站| 国产乱码精品1区2区3区| 国产毛片精品一区| 国产成人精品三级麻豆| 成人avav影音| 色狠狠色狠狠综合| 欧美情侣在线播放| 日韩欧美在线综合网| 亚洲精品一线二线三线| 久久精品网站免费观看| 中文字幕乱码一区二区免费| 国产精品久久久久久久久搜平片| 亚洲欧美综合在线精品| 一区二区三区影院| 日韩在线一二三区| 狠狠色丁香久久婷婷综| 成人在线视频一区| 日本韩国精品在线| 日韩欧美的一区二区| 国产女人aaa级久久久级 | 99国产麻豆精品| 欧美系列亚洲系列| 2023国产精品视频| 中日韩免费视频中文字幕| 亚洲综合在线视频| 麻豆一区二区99久久久久| 国产激情一区二区三区桃花岛亚洲| 国产成人一区在线| 欧美午夜精品理论片a级按摩| 日韩精品资源二区在线| 国产精品福利一区| 蜜臂av日日欢夜夜爽一区| 成人精品鲁一区一区二区| 欧美三级韩国三级日本一级| 欧美成人vr18sexvr| 综合激情成人伊人| 久久精品99国产精品| 99国产精品99久久久久久| 日韩欧美在线一区二区三区| 日韩一区中文字幕| 久久电影网电视剧免费观看| 色综合久久久久综合| 精品国产成人在线影院| 一区二区三区中文在线观看| 国产一区二区三区黄视频| 91国模大尺度私拍在线视频| 精品成人一区二区| 天天亚洲美女在线视频| 91在线视频在线| 欧美极品另类videosde| 蜜桃av一区二区在线观看| 在线观看国产91|