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

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

?? tcp.c

?? 是一本完整而詳細的TCP/IP協(xié)議指南。描述了屬于每一層的各個協(xié)議以及它們?nèi)绾卧诓煌僮飨到y(tǒng)中運行。作者用Lawrence Berkeley實驗室的tcpdump程序來捕獲不同操作系統(tǒng)和TCP/IP實
?? C
?? 第 1 頁 / 共 3 頁
字號:
  DEBUGF(TCP_DEBUG, ("tcp_connect to port %d\n", port));  if(ipaddr != NULL) {    pcb->remote_ip = *ipaddr;  } else {    return ERR_VAL;  }  pcb->remote_port = port;  if(pcb->local_port == 0) {    pcb->local_port = tcp_new_port();  }  iss = tcp_next_iss();  pcb->rcv_nxt = 0;  pcb->snd_nxt = iss;  pcb->lastack = iss - 1;  pcb->snd_lbb = iss - 1;  pcb->rcv_wnd = TCP_WND;  pcb->snd_wnd = TCP_WND;  pcb->mss = TCP_MSS;  pcb->cwnd = 1;  pcb->ssthresh = pcb->mss * 10;  pcb->state = SYN_SENT;  pcb->connected = connected;  TCP_REG(&tcp_active_pcbs, pcb);    /* Build an MSS option */  optdata = HTONL(((u32_t)2 << 24) | 		  ((u32_t)4 << 16) | 		  (((u32_t)pcb->mss / 256) << 8) |		  (pcb->mss & 255));  ret = tcp_enqueue(pcb, NULL, 0, TCP_SYN, 0, (u8_t *)&optdata, 4);  if(ret == ERR_OK) {     tcp_output(pcb);  }  return ret;} /*-----------------------------------------------------------------------------------*//* * tcp_slowtmr(): * * Called every 500 ms and implements the retransmission timer and the timer that * removes PCBs that have been in TIME-WAIT for enough time. It also increments * various timers such as the inactivity timer in each PCB. *//*-----------------------------------------------------------------------------------*/voidtcp_slowtmr(void){  static struct tcp_pcb *pcb, *pcb2, *prev;  static struct tcp_seg *seg, *useg;  static u32_t eff_wnd;  static u8_t pcb_remove;      /* flag if a PCB should be removed */  ++tcp_ticks;    /* Steps through all of the active PCBs. */  prev = NULL;  pcb = tcp_active_pcbs;  while(pcb != NULL) {    ASSERT("tcp_timer_coarse: active pcb->state != CLOSED", pcb->state != CLOSED);    ASSERT("tcp_timer_coarse: active pcb->state != LISTEN", pcb->state != LISTEN);    ASSERT("tcp_timer_coarse: active pcb->state != TIME-WAIT", pcb->state != TIME_WAIT);    pcb_remove = 0;    if(pcb->state == SYN_SENT && pcb->nrtx == TCP_SYNMAXRTX) {      ++pcb_remove;    } else if(pcb->nrtx == TCP_MAXRTX) {      ++pcb_remove;    } else {      ++pcb->rtime;      seg = pcb->unacked;      if(seg != NULL && pcb->rtime >= pcb->rto) {                DEBUGF(TCP_RTO_DEBUG, ("tcp_timer_coarse: rtime %ld pcb->rto %d\n",                               tcp_ticks - pcb->rtime, pcb->rto));	/* Double retransmission time-out unless we are trying to           connect to somebody (i.e., we are in SYN_SENT). */	if(pcb->state != SYN_SENT) {	  pcb->rto = ((pcb->sa >> 3) + pcb->sv) << tcp_backoff[pcb->nrtx];	}        /* Move all other unacked segments to the unsent queue. */        if(seg->next != NULL) {          for(useg = seg->next; useg->next != NULL; useg = useg->next);          /* useg now points to the last segment on the unacked queue. */          useg->next = pcb->unsent;          pcb->unsent = seg->next;          seg->next = NULL;          pcb->snd_nxt = ntohl(pcb->unsent->tcphdr->seqno);        }	/* Do the actual retransmission. */        tcp_rexmit_seg(pcb, seg);        /* Reduce congestion window and ssthresh. */        eff_wnd = MIN(pcb->cwnd, pcb->snd_wnd);        pcb->ssthresh = eff_wnd >> 1;        if(pcb->ssthresh < pcb->mss) {          pcb->ssthresh = pcb->mss * 2;        }        pcb->cwnd = pcb->mss;        DEBUGF(TCP_CWND_DEBUG, ("tcp_rexmit_seg: cwnd %u ssthresh %u\n",                                pcb->cwnd, pcb->ssthresh));      }    }	      /* Check if this PCB has stayed too long in FIN-WAIT-2 */    if(pcb->state == FIN_WAIT_2) {      if((u32_t)(tcp_ticks - pcb->tmr) >	 TCP_FIN_WAIT_TIMEOUT / TCP_SLOW_INTERVAL) {        ++pcb_remove;      }    }    /* If this PCB has queued out of sequence data, but has been       inactive for too long, will drop the data (it will eventually       be retransmitted). */#if TCP_QUEUE_OOSEQ        if(pcb->ooseq != NULL &&       (u32_t)tcp_ticks - pcb->tmr >=       pcb->rto * TCP_OOSEQ_TIMEOUT) {      tcp_segs_free(pcb->ooseq);      pcb->ooseq = NULL;    }#endif /* TCP_QUEUE_OOSEQ */    /* Check if this PCB has stayed too long in SYN-RCVD */    if(pcb->state == SYN_RCVD) {      if((u32_t)(tcp_ticks - pcb->tmr) >	 TCP_SYN_RCVD_TIMEOUT / TCP_SLOW_INTERVAL) {        ++pcb_remove;      }    }    /* If the PCB should be removed, do it. */    if(pcb_remove) {      tcp_pcb_purge(pcb);            /* Remove PCB from tcp_active_pcbs list. */      if(prev != NULL) {	ASSERT("tcp_timer_coarse: middle tcp != tcp_active_pcbs", pcb != tcp_active_pcbs);        prev->next = pcb->next;      } else {        /* This PCB was the first. */        ASSERT("tcp_timer_coarse: first pcb == tcp_active_pcbs", tcp_active_pcbs == pcb);        tcp_active_pcbs = pcb->next;      }      if(pcb->errf != NULL) {	pcb->errf(pcb->callback_arg, ERR_ABRT);      }      pcb2 = pcb->next;      memp_free(MEMP_TCP_PCB, pcb);      pcb = pcb2;    } else {      /* We check if we should poll the connection. */      ++pcb->polltmr;      if(pcb->polltmr >= pcb->pollinterval &&	 pcb->poll != NULL) {	pcb->polltmr = 0;	pcb->poll(pcb->callback_arg, pcb);	tcp_output(pcb);      }            prev = pcb;      pcb = pcb->next;    }  }    /* Steps through all of the TIME-WAIT PCBs. */  prev = NULL;      pcb = tcp_tw_pcbs;  while(pcb != NULL) {    ASSERT("tcp_timer_coarse: TIME-WAIT pcb->state == TIME-WAIT", pcb->state == TIME_WAIT);    pcb_remove = 0;    /* Check if this PCB has stayed long enough in TIME-WAIT */    if((u32_t)(tcp_ticks - pcb->tmr) > 2 * TCP_MSL / TCP_SLOW_INTERVAL) {      ++pcb_remove;    }        /* If the PCB should be removed, do it. */    if(pcb_remove) {      tcp_pcb_purge(pcb);            /* Remove PCB from tcp_tw_pcbs list. */      if(prev != NULL) {	ASSERT("tcp_timer_coarse: middle tcp != tcp_tw_pcbs", pcb != tcp_tw_pcbs);        prev->next = pcb->next;      } else {        /* This PCB was the first. */        ASSERT("tcp_timer_coarse: first pcb == tcp_tw_pcbs", tcp_tw_pcbs == pcb);        tcp_tw_pcbs = pcb->next;      }      pcb2 = pcb->next;      memp_free(MEMP_TCP_PCB, pcb);      pcb = pcb2;    } else {      prev = pcb;      pcb = pcb->next;    }  }}/*-----------------------------------------------------------------------------------*//* * tcp_fasttmr(): * * Is called every TCP_FINE_TIMEOUT (100 ms) and sends delayed ACKs. *//*-----------------------------------------------------------------------------------*/voidtcp_fasttmr(void){  struct tcp_pcb *pcb;  /* send delayed ACKs */    for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) {    if(pcb->flags & TF_ACK_DELAY) {      DEBUGF(TCP_DEBUG, ("tcp_timer_fine: delayed ACK\n"));      tcp_ack_now(pcb);      pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW);    }  }}/*-----------------------------------------------------------------------------------*//* * tcp_segs_free(): * * Deallocates a list of TCP segments (tcp_seg structures). * *//*-----------------------------------------------------------------------------------*/u8_ttcp_segs_free(struct tcp_seg *seg){  u8_t count = 0;  struct tcp_seg *next; again:    if(seg != NULL) {    next = seg->next;    count += tcp_seg_free(seg);    seg = next;    goto again;  }  return count;}/*-----------------------------------------------------------------------------------*//* * tcp_seg_free(): * * Frees a TCP segment. * *//*-----------------------------------------------------------------------------------*/u8_ttcp_seg_free(struct tcp_seg *seg){  u8_t count = 0;    if(seg != NULL) {    if(seg->p == NULL) {      memp_free(MEMP_TCP_SEG, seg);    } else {      count = pbuf_free(seg->p);#if TCP_DEBUG      seg->p = NULL;#endif /* TCP_DEBUG */      memp_free(MEMP_TCP_SEG, seg);    }  }  return count;}/*-----------------------------------------------------------------------------------*//* * tcp_seg_copy(): * * Returns a copy of the given TCP segment. * */ /*-----------------------------------------------------------------------------------*/struct tcp_seg *tcp_seg_copy(struct tcp_seg *seg){  struct tcp_seg *cseg;  cseg = memp_malloc(MEMP_TCP_SEG);  if(cseg == NULL) {    return NULL;  }  bcopy(seg, cseg, sizeof(struct tcp_seg));  pbuf_ref(cseg->p);  return cseg;}/*-----------------------------------------------------------------------------------*//* * tcp_new(): * * Creates a new TCP protocol control block but doesn't place it on * any of the TCP PCB lists. * *//*-----------------------------------------------------------------------------------*/struct tcp_pcb *tcp_new(void){  struct tcp_pcb *pcb;  u32_t iss;    pcb = memp_malloc2(MEMP_TCP_PCB);  if(pcb != NULL) {    bzero(pcb, sizeof(struct tcp_pcb));    pcb->snd_buf = TCP_SND_BUF;    pcb->snd_queuelen = 0;    pcb->rcv_wnd = TCP_WND;    pcb->mss = TCP_MSS;    pcb->rto = 3000 / TCP_SLOW_INTERVAL;    pcb->sa = 0;    pcb->sv = 3000 / TCP_SLOW_INTERVAL;    pcb->rtime = 0;    pcb->cwnd = 1;    iss = tcp_next_iss();    pcb->snd_wl2 = iss;    pcb->snd_nxt = iss;    pcb->snd_max = iss;    pcb->lastack = iss;    pcb->snd_lbb = iss;       pcb->tmr = tcp_ticks;    pcb->polltmr = 0;    return pcb;  }  return NULL;}/*-----------------------------------------------------------------------------------*//* * tcp_mem_reclaim(): * * Tries to free up TCP memory. This function is called from the memory manager * when memory is scarce. * *//*-----------------------------------------------------------------------------------*/#if MEM_RECLAIMstatic mem_size_ttcp_mem_reclaim(void *arg, mem_size_t size){  static struct tcp_pcb *pcb, *inactive;  static u32_t inactivity;  static mem_size_t reclaimed;  reclaimed = 0;  /* Kill the oldest active connection, hoping that there may be     memory associated with it. */  inactivity = 0;  inactive = NULL;  for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) {    if((u32_t)(tcp_ticks - pcb->tmr) > inactivity) {      inactivity = tcp_ticks - pcb->tmr;      inactive = pcb;    }  }  if(inactive != NULL) {    DEBUGF(TCP_DEBUG, ("tcp_mem_reclaim: killing oldest PCB 0x%p (%ld)\n",		       inactive, inactivity));    tcp_abort(inactive);  }  return reclaimed;}#endif /* MEM_RECLAIM *//*-----------------------------------------------------------------------------------*//* * tcp_memp_reclaim(): * * Tries to free up TCP memory. This function is called from the * memory pool manager when memory is scarce. * */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
洋洋成人永久网站入口| 亚洲愉拍自拍另类高清精品| 亚洲欧美日本韩国| 免费国产亚洲视频| av一区二区三区四区| 91精品国产综合久久久久久| 中文字幕中文字幕一区| 麻豆成人av在线| 在线看一区二区| 久久亚洲精华国产精华液| 亚洲线精品一区二区三区八戒| 国产精品99久久久久久有的能看| 欧美色网一区二区| 136国产福利精品导航| 国产乱一区二区| 日韩免费成人网| 亚洲一级二级三级在线免费观看| 成人av免费在线播放| 中文字幕一区二区三区在线不卡 | 91精品国产91久久久久久一区二区 | 最新不卡av在线| 国产精品一二三四五| 91精品国产一区二区三区香蕉| 亚洲日本乱码在线观看| 国产不卡在线视频| 久久九九影视网| 国产成人午夜高潮毛片| 日韩精品一区二| 蜜桃av噜噜一区| 91精品国产色综合久久久蜜香臀| 日韩久久一区二区| 91亚洲资源网| 国产精品免费人成网站| 成人午夜av在线| 国产精品久久影院| 欧美一区二区三区电影| 日韩电影一二三区| 这里只有精品视频在线观看| 三级影片在线观看欧美日韩一区二区 | 国产精品资源网| 久久精品一区二区三区不卡牛牛| 国产一区欧美一区| 久久众筹精品私拍模特| 国产乱人伦偷精品视频不卡 | 成人久久久精品乱码一区二区三区| 精品电影一区二区三区| 国产精品亚洲综合一区在线观看| 久久久美女毛片| 成人免费看视频| ...xxx性欧美| 欧美性猛交xxxx黑人交| 日精品一区二区三区| 精品国产电影一区二区| 国产99久久精品| 亚洲欧美一区二区久久| 欧美日韩午夜在线视频| 丝瓜av网站精品一区二区| 日韩欧美一区在线观看| 国产成人av电影在线播放| 亚洲欧洲精品一区二区三区不卡| 欧日韩精品视频| 美国一区二区三区在线播放| 国产午夜精品久久久久久久| 91视频在线观看| 日本不卡免费在线视频| 国产欧美精品一区二区色综合朱莉| 99久久精品国产导航| 午夜精品成人在线视频| 国产亚洲婷婷免费| 欧美在线999| 国产乱妇无码大片在线观看| 中文字幕色av一区二区三区| 欧美精品一二三区| 成人理论电影网| 久久精品99国产精品日本| 亚洲欧美综合另类在线卡通| 7777精品久久久大香线蕉| 成人网男人的天堂| 日本不卡免费在线视频| 亚洲精品第1页| 久久久午夜精品理论片中文字幕| 日本精品裸体写真集在线观看| 麻豆极品一区二区三区| 亚洲乱码中文字幕| 久久久午夜精品理论片中文字幕| 欧美视频一区二区在线观看| 国产91在线看| 老司机精品视频线观看86| 亚洲日本一区二区| 国产日韩三级在线| 日韩天堂在线观看| 色爱区综合激月婷婷| 国产一区二区在线视频| 舔着乳尖日韩一区| 青青草一区二区三区| 17c精品麻豆一区二区免费| 久久综合精品国产一区二区三区| 欧美日韩免费观看一区二区三区| 大桥未久av一区二区三区中文| 免费视频一区二区| 日韩av二区在线播放| 亚洲图片欧美色图| 亚洲天堂av老司机| 欧美激情一二三区| 国产色婷婷亚洲99精品小说| 欧美一区二区三区不卡| 欧美人狂配大交3d怪物一区| 色av一区二区| 日本韩国欧美一区| 色综合久久综合| 91香蕉视频在线| voyeur盗摄精品| 99视频一区二区| 成人h动漫精品一区二| 国产精品一色哟哟哟| 国产一区二区日韩精品| 精彩视频一区二区| 国产精品一二三在| av不卡在线播放| 91啪亚洲精品| 在线一区二区观看| 欧美在线视频不卡| 欧美日韩一区小说| 在线播放中文字幕一区| 欧美美女bb生活片| 欧美一区二区三区精品| 日韩欧美一卡二卡| 精品免费日韩av| 久久久久久免费网| 中文字幕乱码久久午夜不卡| 国产精品久久久久婷婷二区次| 国产精品福利av| 亚洲综合999| 日本在线观看不卡视频| 美女视频黄频大全不卡视频在线播放| 美女网站色91| 蜜桃精品在线观看| 91精品国产综合久久久蜜臀图片| 国产精品不卡在线观看| 日韩欧美国产三级电影视频| 精品国产乱码久久久久久图片| 精品欧美久久久| 国产精品女同一区二区三区| 亚洲精品视频在线看| 日本免费新一区视频| 成人免费高清视频| 欧美猛男男办公室激情| 久久综合五月天婷婷伊人| 国产精品视频一二三区| 亚洲一区二区美女| 国产一区福利在线| 色久综合一二码| 欧美精品一区二区三区视频| 中文字幕视频一区| 蜜桃一区二区三区在线观看| 国产福利电影一区二区三区| 一本到不卡免费一区二区| 日韩欧美一级二级三级久久久| 国产亚洲成av人在线观看导航| 一区二区三区精品在线| 韩国av一区二区三区四区| 91麻豆.com| 久久人人爽爽爽人久久久| 一区二区三区加勒比av| 国产一二三精品| 欧美猛男超大videosgay| 中文字幕乱码久久午夜不卡| 日韩影院在线观看| 91麻豆国产精品久久| 精品国产凹凸成av人网站| 国产成人在线视频网址| 欧美视频自拍偷拍| 亚洲国产成人私人影院tom| 丝袜亚洲精品中文字幕一区| 99re亚洲国产精品| www精品美女久久久tv| 五月天激情综合| 色综合久久综合网| 国产精品国产三级国产| 激情另类小说区图片区视频区| 欧美日韩国产一级片| 亚洲欧美日韩综合aⅴ视频| 国产精品1区2区3区在线观看| 欧美欧美欧美欧美| 一区二区成人在线| 一本大道久久a久久综合| 中文字幕的久久| 国产成人午夜电影网| 精品久久久久久久久久久院品网| 香蕉影视欧美成人| 欧洲国内综合视频| 成人免费在线观看入口| 粉嫩av一区二区三区在线播放 | 精品国偷自产国产一区| 天天色综合成人网| 欧美理论在线播放| 天堂av在线一区| 日韩三级视频在线观看| 蜜乳av一区二区| 日韩精品一区二区三区蜜臀 |