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

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

?? tcp_out.c

?? 包含lwip這個精簡IP協議棧的ucos源代碼.
?? C
?? 第 1 頁 / 共 2 頁
字號:
    tcp_segs_free(queue);  }  if (pcb->snd_queuelen != 0) {    LWIP_ASSERT("tcp_enqueue: valid queue length", pcb->unacked != NULL ||      pcb->unsent != NULL);  }  LWIP_DEBUGF(TCP_QLEN_DEBUG | DBG_STATE, ("tcp_enqueue: %d (with mem err)\n", pcb->snd_queuelen));  return ERR_MEM;}/* find out what we can send and send it */err_ttcp_output(struct tcp_pcb *pcb){  struct pbuf *p;  struct tcp_hdr *tcphdr;  struct tcp_seg *seg, *useg;  u32_t wnd;#if TCP_CWND_DEBUG  int i = 0;#endif /* TCP_CWND_DEBUG */  /* First, check if we are invoked by the TCP input processing     code. If so, we do not output anything. Instead, we rely on the     input processing code to call us when input processing is done     with. */  if (tcp_input_pcb == pcb) {    return ERR_OK;  }  wnd = LWIP_MIN(pcb->snd_wnd, pcb->cwnd);  seg = pcb->unsent;  /* useg should point to last segment on unacked queue */  useg = pcb->unacked;  if (useg != NULL) {    for (; useg->next != NULL; useg = useg->next);  }                                                                                  /* If the TF_ACK_NOW flag is set and no data will be sent (either   * because the ->unsent queue is empty or because the window does   * not allow it), construct an empty ACK segment and send it.   *   * If data is to be sent, we will just piggyback the ACK (see below).   */  if (pcb->flags & TF_ACK_NOW &&     (seg == NULL ||      ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len > wnd)) {    p = pbuf_alloc(PBUF_IP, TCP_HLEN, PBUF_RAM);    if (p == NULL) {      LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output: (ACK) could not allocate pbuf\n"));      return ERR_BUF;    }    LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output: sending ACK for %lu\n", pcb->rcv_nxt));    /* remove ACK flags from the PCB, as we send an empty ACK now */    pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW);    tcphdr = p->payload;    tcphdr->src = htons(pcb->local_port);    tcphdr->dest = htons(pcb->remote_port);    tcphdr->seqno = htonl(pcb->snd_nxt);    tcphdr->ackno = htonl(pcb->rcv_nxt);    TCPH_FLAGS_SET(tcphdr, TCP_ACK);    tcphdr->wnd = htons(pcb->rcv_wnd);    tcphdr->urgp = 0;    TCPH_HDRLEN_SET(tcphdr, 5);    tcphdr->chksum = 0;#if CHECKSUM_GEN_TCP    tcphdr->chksum = inet_chksum_pseudo(p, &(pcb->local_ip), &(pcb->remote_ip),          IP_PROTO_TCP, p->tot_len);#endif    ip_output(p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos,        IP_PROTO_TCP);    pbuf_free(p);    return ERR_OK;  }#if TCP_OUTPUT_DEBUG  if (seg == NULL) {    LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output: nothing to send (%p)\n", pcb->unsent));  }#endif /* TCP_OUTPUT_DEBUG */#if TCP_CWND_DEBUG  if (seg == NULL) {    LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_output: snd_wnd %lu, cwnd %lu, wnd %lu, seg == NULL, ack %lu\n",                            pcb->snd_wnd, pcb->cwnd, wnd,                            pcb->lastack));  } else {    LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_output: snd_wnd %lu, cwnd %lu, wnd %lu, effwnd %lu, seq %lu, ack %lu\n",                            pcb->snd_wnd, pcb->cwnd, wnd,                            ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len,                            ntohl(seg->tcphdr->seqno), pcb->lastack));  }#endif /* TCP_CWND_DEBUG */  /* data available and window allows it to be sent? */  while (seg != NULL &&  ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len <= wnd) {#if TCP_CWND_DEBUG    LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_output: snd_wnd %lu, cwnd %lu, wnd %lu, effwnd %lu, seq %lu, ack %lu, i%d\n",                            pcb->snd_wnd, pcb->cwnd, wnd,                            ntohl(seg->tcphdr->seqno) + seg->len -                            pcb->lastack,                            ntohl(seg->tcphdr->seqno), pcb->lastack, i));    ++i;#endif /* TCP_CWND_DEBUG */    pcb->unsent = seg->next;    if (pcb->state != SYN_SENT) {      TCPH_SET_FLAG(seg->tcphdr, TCP_ACK);      pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW);    }    tcp_output_segment(seg, pcb);    pcb->snd_nxt = ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg);    if (TCP_SEQ_LT(pcb->snd_max, pcb->snd_nxt)) {      pcb->snd_max = pcb->snd_nxt;    }    /* put segment on unacknowledged list if length > 0 */    if (TCP_TCPLEN(seg) > 0) {      seg->next = NULL;      /* unacked list is empty? */      if (pcb->unacked == NULL) {        pcb->unacked = seg;        useg = seg;      /* unacked list is not empty? */      } else {        /* In the case of fast retransmit, the packet should not go to the tail         * of the unacked queue, but rather at the head. We need to check for         * this case. -STJ Jul 27, 2004 */        if (TCP_SEQ_LT(ntohl(seg->tcphdr->seqno), ntohl(useg->tcphdr->seqno))){          /* add segment to head of unacked list */          seg->next = pcb->unacked;          pcb->unacked = seg;        } else {          /* add segment to tail of unacked list */          useg->next = seg;          useg = useg->next;        }      }    /* do not queue empty segments on the unacked list */    } else {      tcp_seg_free(seg);    }    seg = pcb->unsent;  }  return ERR_OK;}/** * Actually send a TCP segment over IP */static voidtcp_output_segment(struct tcp_seg *seg, struct tcp_pcb *pcb){  u16_t len;  struct netif *netif;  /* The TCP header has already been constructed, but the ackno and   wnd fields remain. */  seg->tcphdr->ackno = htonl(pcb->rcv_nxt);  /* silly window avoidance */  if (pcb->rcv_wnd < pcb->mss) {    seg->tcphdr->wnd = 0;  } else {    /* advertise our receive window size in this TCP segment */    seg->tcphdr->wnd = htons(pcb->rcv_wnd);  }  /* 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));  }  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 %lu\n", pcb->rtseq));  }  LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output_segment: %lu:%lu\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);  ip_output(seg->p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos,      IP_PROTO_TCP);}voidtcp_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;  }  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);   /* 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 %lu ackno %lu.\n", seqno, ackno));}/* requeue all unacked segments for retransmission */voidtcp_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;  pcb->snd_nxt = ntohl(pcb->unsent->tcphdr->seqno);  /* increment number of retransmissions */  ++pcb->nrtx;  /* Don't take any RTT measurements after retransmitting. */  pcb->rttest = 0;  /* Do the actual retransmission */  tcp_output(pcb);}voidtcp_rexmit(struct tcp_pcb *pcb){  struct tcp_seg *seg;  if (pcb->unacked == NULL) {    return;  }  /* Move the first unacked segment to the unsent queue */  seg = pcb->unacked->next;  pcb->unacked->next = pcb->unsent;  pcb->unsent = pcb->unacked;  pcb->unacked = seg;  pcb->snd_nxt = ntohl(pcb->unsent->tcphdr->seqno);  ++pcb->nrtx;  /* Don't take any rtt measurements after retransmitting. */  pcb->rttest = 0;  /* Do the actual retransmission. */  tcp_output(pcb);}voidtcp_keepalive(struct tcp_pcb *pcb){   struct pbuf *p;   struct tcp_hdr *tcphdr;   LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: sending KEEPALIVE probe to %u.%u.%u.%u\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 %lu   pcb->tmr %lu  pcb->keep_cnt %u\n", tcp_ticks, pcb->tmr, pcb->keep_cnt));      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;   }   tcphdr = p->payload;   tcphdr->src = htons(pcb->local_port);   tcphdr->dest = htons(pcb->remote_port);   tcphdr->seqno = htonl(pcb->snd_nxt - 1);   tcphdr->ackno = htonl(pcb->rcv_nxt);   tcphdr->wnd = htons(pcb->rcv_wnd);   tcphdr->urgp = 0;   TCPH_HDRLEN_SET(tcphdr, 5);      tcphdr->chksum = 0;#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 */  ip_output(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP);  pbuf_free(p);  LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_keepalive: seqno %lu ackno %lu.\n", pcb->snd_nxt - 1, pcb->rcv_nxt));}#endif /* LWIP_TCP */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区三区av| 日本在线不卡一区| 高清不卡一二三区| 久久久精品免费网站| 国产精品99久久久久| 日本一区二区三区视频视频| 成人国产精品免费观看视频| 日韩伦理电影网| 欧美日韩精品系列| 免费的国产精品| 国产欧美精品一区| 91国内精品野花午夜精品| 香蕉久久夜色精品国产使用方法| 56国语精品自产拍在线观看| 国模冰冰炮一区二区| 国产精品国产精品国产专区不片 | 国产色产综合色产在线视频| 国产**成人网毛片九色| 亚洲美女屁股眼交3| 91麻豆精品国产91久久久资源速度| 麻豆精品视频在线观看免费| 中文字幕av不卡| 精品视频1区2区| 国产激情一区二区三区四区 | 亚洲品质自拍视频网站| 欧美色综合网站| 国产一区二区三区免费播放| 亚洲欧美国产毛片在线| 日韩午夜在线观看视频| 成人免费视频网站在线观看| 亚洲.国产.中文慕字在线| 精品播放一区二区| 91毛片在线观看| 精品系列免费在线观看| 亚洲精品国产品国语在线app| 日韩欧美国产系列| 日韩精品一区二区三区视频播放 | 亚洲一区二区在线播放相泽| 欧美本精品男人aⅴ天堂| 色呦呦一区二区三区| 久久狠狠亚洲综合| 一区二区成人在线| 亚洲国产精品成人综合| 日韩一二在线观看| 欧美在线视频日韩| av动漫一区二区| 国内外成人在线| 日韩国产欧美在线播放| 亚洲美女在线一区| 国产欧美日韩精品一区| 欧美电影免费提供在线观看| 欧美在线三级电影| 色综合久久久久| 成人美女在线视频| 国产自产视频一区二区三区| 日韩av电影免费观看高清完整版在线观看| 国产精品久久久久一区二区三区共| 欧美xxxxxxxx| 日韩一级精品视频在线观看| 欧美影片第一页| av资源站一区| 成人自拍视频在线观看| 国产尤物一区二区在线| 日本强好片久久久久久aaa| 夜夜爽夜夜爽精品视频| 亚洲精品国产精品乱码不99| 亚洲欧洲性图库| 午夜精品久久久久久久久久 | 狠狠色丁香婷婷综合| 日韩不卡一二三区| 婷婷成人综合网| 婷婷综合在线观看| 天堂蜜桃一区二区三区| 亚洲不卡在线观看| 午夜精品福利在线| 亚洲无线码一区二区三区| 亚洲综合在线五月| 亚洲一区二区美女| 亚洲r级在线视频| 图片区日韩欧美亚洲| 日韩电影在线免费| 久久精品免费观看| 国产一区在线精品| 成人少妇影院yyyy| 99这里只有久久精品视频| thepron国产精品| 日本道免费精品一区二区三区| 91丨porny丨首页| 日本韩国欧美国产| 欧美日本一区二区在线观看| 这里是久久伊人| 精品国产乱码久久久久久免费| 欧美tickling挠脚心丨vk| 精品国产三级a在线观看| 久久精品人人做人人综合| 日本一区二区三区视频视频| 亚洲欧洲国产日韩| 亚洲国产日韩一级| 久久国产精品72免费观看| 精品在线播放免费| 懂色av一区二区三区免费观看| 成人h精品动漫一区二区三区| 色狠狠色噜噜噜综合网| 在线电影欧美成精品| 久久一区二区视频| 亚洲三级在线看| 日韩福利电影在线| 丁香激情综合国产| 欧美最猛黑人xxxxx猛交| 日韩欧美一二三| 国产精品日产欧美久久久久| 午夜精品在线看| 成人午夜免费视频| 欧美日韩在线播放一区| 久久久久99精品一区| 亚洲精品国产成人久久av盗摄 | 欧美优质美女网站| 精品久久五月天| 亚洲日本韩国一区| 久久精品国产精品青草| 日韩欧美在线123| 国产精品久久久久影视| 青娱乐精品视频在线| 成人午夜电影网站| 在线电影国产精品| 中文字幕欧美一| 精品制服美女丁香| 欧美优质美女网站| 日本一二三四高清不卡| 日韩不卡免费视频| 91视频一区二区三区| 久久只精品国产| 亚洲3atv精品一区二区三区| www.欧美日韩| 久久中文字幕电影| 日韩av网站免费在线| 色综合夜色一区| 国产欧美日本一区二区三区| 免费高清视频精品| 欧美日韩久久一区二区| 亚洲天堂久久久久久久| 国产又粗又猛又爽又黄91精品| 欧美日韩精品一区二区三区| 亚洲欧美欧美一区二区三区| 国产麻豆一精品一av一免费| 欧美一级欧美三级| 亚洲一二三四在线观看| av电影在线观看一区| 中文字幕不卡在线观看| 国产一区三区三区| 日韩一区二区在线看| 一区二区高清免费观看影视大全| 成人午夜视频在线观看| 久久麻豆一区二区| 激情六月婷婷久久| 欧美一区二区三区爱爱| 日韩av在线发布| 91精品国产色综合久久ai换脸| 亚洲一二三区视频在线观看| 日本韩国一区二区| 夜夜精品视频一区二区| 亚洲精品一区二区三区在线观看| 视频在线观看一区二区三区| 欧美无砖砖区免费| 五月综合激情日本mⅴ| 欧美性猛交xxxxxx富婆| 亚洲综合色噜噜狠狠| 欧美综合亚洲图片综合区| 一区二区三区色| 欧美在线你懂的| 亚洲成va人在线观看| 精品视频全国免费看| 日韩和欧美的一区| 日韩一级高清毛片| 国产一区二区精品在线观看| 久久嫩草精品久久久精品一| 国产麻豆视频一区| 国产精品久久久久久久久免费桃花| 成人短视频下载| 亚洲欧美国产高清| 欧美日韩精品一区二区| 麻豆精品一二三| 国产视频视频一区| 91浏览器入口在线观看| 亚洲一二三四区不卡| 日韩一区二区三区免费观看| 经典一区二区三区| 欧美—级在线免费片| 色婷婷综合久久久久中文一区二区| 亚洲综合久久久久| 日韩一区二区三区观看| 国产精品亚洲午夜一区二区三区 | 精品国产sm最大网站免费看| 国产在线视视频有精品| 亚洲人成7777| 日韩美女天天操| 国产99精品国产| 亚洲午夜精品久久久久久久久| 日韩一区二区三区视频在线观看 | 91美女片黄在线观看91美女|