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

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

?? tcp.c

?? 基于DM642的網絡傳輸
?? C
?? 第 1 頁 / 共 3 頁
字號:
  cseg = memp_malloc(MEMP_TCP_SEG);
  if (cseg == NULL) 
  {
	    return NULL;
  }
  memcpy((char *)cseg, (const char *)seg, sizeof(struct tcp_seg)); 
  pbuf_ref(cseg->p);
  return cseg;
}
#endif


//#if LWIP_CALLBACK_API 
static err_t tcp_recv_null(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
{
	  arg = arg;
	  if (p != NULL) 
	  {
		    pbuf_free(p);
	  } 
	  else if (err == ERR_OK)
	  {
		    return tcp_close(pcb);
	  }
	  return ERR_OK;
}
//#endif /* LWIP_CALLBACK_API */

static void tcp_kill_prio(u8_t prio)
{
	  struct tcp_pcb *pcb, *inactive;
	  u32_t inactivity;
	  u8_t mprio;
	
	
	  mprio = TCP_PRIO_MAX;
	  
	  /* We kill the oldest active connection that has lower priority than
	     prio. */
	  inactivity = 0;
	  inactive = NULL;
	  for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next)
	  {
		    if (pcb->prio <= prio &&
		       pcb->prio <= mprio &&
		       (u32_t)(tcp_ticks - pcb->tmr) >= inactivity)
		    {
			      inactivity = tcp_ticks - pcb->tmr;
			      inactive = pcb;
			      mprio = pcb->prio;
		    }
	  }
	  if (inactive != NULL) 
	  {
//		    LWIP_DEBUGF(TCP_DEBUG, ("tcp_kill_prio: killing oldest PCB 0x%p (%ld)\n",(void *)inactive, inactivity));
		    tcp_abort(inactive);
	  }      
}


static void tcp_kill_timewait(void)
{
	  struct tcp_pcb *pcb, *inactive;
	  u32_t inactivity;
	
	  inactivity = 0;
	  inactive = NULL;
	  for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) 
	  {
		    if ((u32_t)(tcp_ticks - pcb->tmr) >= inactivity) 
		    {
			      inactivity = tcp_ticks - pcb->tmr;
			      inactive = pcb;
		    }
	  }
	  if (inactive != NULL) 
	  {
//		    LWIP_DEBUGF(TCP_DEBUG, ("tcp_kill_timewait: killing oldest TIME-WAIT PCB 0x%p (%ld)\n",(void *)inactive, inactivity));
		    tcp_abort(inactive);
	  }      
}



struct tcp_pcb *
tcp_alloc(u8_t prio)
{
  struct tcp_pcb *pcb;
  u32_t iss;
  
  pcb = memp_malloc(MEMP_TCP_PCB);
  if (pcb == NULL) {
    /* Try killing oldest connection in TIME-WAIT. */
//    LWIP_DEBUGF(TCP_DEBUG, ("tcp_alloc: killing off oldest TIME-WAIT connection\n"));
    tcp_kill_timewait();
    pcb = memp_malloc(MEMP_TCP_PCB);
    if (pcb == NULL) {
      tcp_kill_prio(prio);    
      pcb = memp_malloc(MEMP_TCP_PCB);
    }
  }
  if (pcb != NULL) {
    memset(pcb, 0, sizeof(struct tcp_pcb));
    pcb->prio = TCP_PRIO_NORMAL;
    pcb->snd_buf = TCP_SND_BUF;
    pcb->snd_queuelen = 0;
    pcb->rcv_wnd = TCP_WND;
//    pcb->tos = 0;
//   pcb->ttl = TCP_TTL;
    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;

#if LWIP_CALLBACK_API
    pcb->recv = tcp_recv_null;
#endif /* LWIP_CALLBACK_API */  
    
    /* Init KEEPALIVE timer */
    pcb->keepalive = TCP_KEEPDEFAULT;
    pcb->keep_cnt = 0;
  }
  return pcb;
}

/**
 * Creates a new TCP protocol control block but doesn't place it on
 * any of the TCP PCB lists.
 *
 * @internal: Maybe there should be a idle TCP PCB list where these
 * PCBs are put on. We can then implement port reservation using
 * tcp_bind(). Currently, we lack this (BSD socket type of) feature.
 */

struct tcp_pcb *
tcp_new(void)
{
  return tcp_alloc(TCP_PRIO_NORMAL);
}

/*
 * tcp_arg():
 *
 * Used to specify the argument that should be passed callback
 * functions.
 *
 */ 

void
tcp_arg(struct tcp_pcb *pcb, void *arg)
{  
  pcb->callback_arg = arg;
}
#if LWIP_CALLBACK_API

/**
 * Used to specify the function that should be called when a TCP
 * connection receives data.
 *
 */ 
void tcp_recv(struct tcp_pcb *pcb,
             err_t (* recv)(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err))
{
      pcb->recv = recv;
}

/**
 * Used to specify the function that should be called when TCP data
 * has been successfully delivered to the remote host.
 *
 */ 

void
tcp_sent(struct tcp_pcb *pcb,
   err_t (* sent)(void *arg, struct tcp_pcb *tpcb, u16_t len))
{
    pcb->sent = sent;
}



/**
 * Used to specify the function that should be called when a fatal error
 * has occured on the connection.
 *
 */ 
void
tcp_err(struct tcp_pcb *pcb,
        void (* errf)(void *arg, err_t err))
{
  pcb->errf = errf;
}

/**
 * Used for specifying the function that should be called when a
 * LISTENing connection has been connected to another host.
 *
 */ 
void
tcp_accept(struct tcp_pcb *pcb,
     err_t (* accept)(void *arg, struct tcp_pcb *newpcb, err_t err))
{
  ((struct tcp_pcb_listen *)pcb)->accept = accept;
}
#endif /* LWIP_CALLBACK_API */


/**
 * Used to specify the function that should be called periodically
 * from TCP. The interval is specified in terms of the TCP coarse
 * timer interval, which is called twice a second.
 *
 */ 
void
tcp_poll(struct tcp_pcb *pcb,
   err_t (* poll)(void *arg, struct tcp_pcb *tpcb), u8_t interval)
{
#if LWIP_CALLBACK_API
  pcb->poll = poll;
#endif /* LWIP_CALLBACK_API */  
  pcb->pollinterval = interval;
}

/**
 * Purges a TCP PCB. Removes any buffered data and frees the buffer memory.
 *
 */
void
tcp_pcb_purge(struct tcp_pcb *pcb)
{
	  if (pcb->state != CLOSED &&
	     pcb->state != TIME_WAIT &&
	     pcb->state != LISTEN) 
	  {	
//		    LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge\n"));
		    
		    if (pcb->unsent != NULL) 
		    {    
//		      LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: not all data sent\n"));
		    }
		    if (pcb->unacked != NULL) 
		    {    
//		      LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: data left on ->unacked\n"));
		    }
		    #if TCP_QUEUE_OOSEQ /* LW */
		    if (pcb->ooseq != NULL) 
		    {    
//		      LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: data left on ->ooseq\n"));
		    }
		    
		    tcp_segs_free(pcb->ooseq);
		    pcb->ooseq = NULL;
		    #endif /* TCP_QUEUE_OOSEQ */
		    tcp_segs_free(pcb->unsent);
		    tcp_segs_free(pcb->unacked);
		    pcb->unacked = pcb->unsent = NULL;
	  }
}

/**
 * Purges the PCB and removes it from a PCB list. Any delayed ACKs are sent first.
 *
 */
void
tcp_pcb_remove(struct tcp_pcb **pcblist, struct tcp_pcb *pcb)
{
	  TCP_RMV(pcblist, pcb);
	
	  tcp_pcb_purge(pcb);
	  
	  /* if there is an outstanding delayed ACKs, send it */
	  if (pcb->state != TIME_WAIT &&
	     pcb->state != LISTEN &&
	     pcb->flags & TF_ACK_DELAY) 
	  {
		    pcb->flags |= TF_ACK_NOW;
		    tcp_output(pcb);
	  }  
	  pcb->state = CLOSED;
	
//	  LWIP_ASSERT("tcp_pcb_remove: tcp_pcbs_sane()", tcp_pcbs_sane());
}

/**
 * Calculates a new initial sequence number for new connections.
 *
 */
u32_t tcp_next_iss(void)
{
	 static u32_t iss = 6510;
	 iss += tcp_ticks;       /* XXX */
	 return iss;
}

#if TCP_DEBUG || TCP_INPUT_DEBUG || TCP_OUTPUT_DEBUG
void tcp_debug_print(struct tcp_hdr *tcphdr)
{
  LWIP_DEBUGF(TCP_DEBUG, ("TCP header:\n"));
  LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n"));
  LWIP_DEBUGF(TCP_DEBUG, ("|    %5u      |    %5u      | (src port, dest port)\n",
         ntohs(tcphdr->src), ntohs(tcphdr->dest)));
  LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n"));
  LWIP_DEBUGF(TCP_DEBUG, ("|           %010lu          | (seq no)\n",
          ntohl(tcphdr->seqno)));
  LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n"));
  LWIP_DEBUGF(TCP_DEBUG, ("|           %010lu          | (ack no)\n",
         ntohl(tcphdr->ackno)));
  LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n"));
  LWIP_DEBUGF(TCP_DEBUG, ("| %2u |   |%u%u%u%u%u%u|     %5u     | (hdrlen, flags (",
       TCPH_HDRLEN(tcphdr),
         TCPH_FLAGS(tcphdr) >> 5 & 1,
         TCPH_FLAGS(tcphdr) >> 4 & 1,
         TCPH_FLAGS(tcphdr) >> 3 & 1,
         TCPH_FLAGS(tcphdr) >> 2 & 1,
         TCPH_FLAGS(tcphdr) >> 1 & 1,
         TCPH_FLAGS(tcphdr) & 1,
         ntohs(tcphdr->wnd)));
  tcp_debug_print_flags(TCPH_FLAGS(tcphdr));
  LWIP_DEBUGF(TCP_DEBUG, ("), win)\n"));
  LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n"));
  LWIP_DEBUGF(TCP_DEBUG, ("|    0x%04x     |     %5u     | (chksum, urgp)\n",
         ntohs(tcphdr->chksum), ntohs(tcphdr->urgp)));
  LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n"));
}

void
tcp_debug_print_state(enum tcp_state s)
{
  LWIP_DEBUGF(TCP_DEBUG, ("State: "));
  switch (s) {
  case CLOSED:
    LWIP_DEBUGF(TCP_DEBUG, ("CLOSED\n"));
    break;
 case LISTEN:
   LWIP_DEBUGF(TCP_DEBUG, ("LISTEN\n"));
   break;
  case SYN_SENT:
    LWIP_DEBUGF(TCP_DEBUG, ("SYN_SENT\n"));
    break;
  case SYN_RCVD:
    LWIP_DEBUGF(TCP_DEBUG, ("SYN_RCVD\n"));
    break;
  case ESTABLISHED:
    LWIP_DEBUGF(TCP_DEBUG, ("ESTABLISHED\n"));
    break;
  case FIN_WAIT_1:
    LWIP_DEBUGF(TCP_DEBUG, ("FIN_WAIT_1\n"));
    break;
  case FIN_WAIT_2:
    LWIP_DEBUGF(TCP_DEBUG, ("FIN_WAIT_2\n"));
    break;
  case CLOSE_WAIT:
    LWIP_DEBUGF(TCP_DEBUG, ("CLOSE_WAIT\n"));
    break;
  case CLOSING:
    LWIP_DEBUGF(TCP_DEBUG, ("CLOSING\n"));
    break;
  case LAST_ACK:
    LWIP_DEBUGF(TCP_DEBUG, ("LAST_ACK\n"));
    break;
  case TIME_WAIT:
    LWIP_DEBUGF(TCP_DEBUG, ("TIME_WAIT\n"));
   break;
  }
}

void
tcp_debug_print_flags(u8_t flags)
{
  if (flags & TCP_FIN) {
    LWIP_DEBUGF(TCP_DEBUG, ("FIN "));
  }
  if (flags & TCP_SYN) {
    LWIP_DEBUGF(TCP_DEBUG, ("SYN "));
  }
  if (flags & TCP_RST) {
    LWIP_DEBUGF(TCP_DEBUG, ("RST "));
  }
  if (flags & TCP_PSH) {
    LWIP_DEBUGF(TCP_DEBUG, ("PSH "));
  }
  if (flags & TCP_ACK) {
    LWIP_DEBUGF(TCP_DEBUG, ("ACK "));
  }
  if (flags & TCP_URG) {
    LWIP_DEBUGF(TCP_DEBUG, ("URG "));
  }
  if (flags & TCP_ECE) {
    LWIP_DEBUGF(TCP_DEBUG, ("ECE "));
  }
  if (flags & TCP_CWR) {
    LWIP_DEBUGF(TCP_DEBUG, ("CWR "));
  }
}

void
tcp_debug_print_pcbs(void)
{
  struct tcp_pcb *pcb;
  LWIP_DEBUGF(TCP_DEBUG, ("Active PCB states:\n"));
  for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) {
    LWIP_DEBUGF(TCP_DEBUG, ("Local port %u, foreign port %u snd_nxt %lu rcv_nxt %lu ",
                       pcb->local_port, pcb->remote_port,
                       pcb->snd_nxt, pcb->rcv_nxt));
    tcp_debug_print_state(pcb->state);
  }    
  LWIP_DEBUGF(TCP_DEBUG, ("Listen PCB states:\n"));
  for(pcb = (struct tcp_pcb *)tcp_listen_pcbs.pcbs; pcb != NULL; pcb = pcb->next) {
    LWIP_DEBUGF(TCP_DEBUG, ("Local port %u, foreign port %u snd_nxt %lu rcv_nxt %lu ",
                       pcb->local_port, pcb->remote_port,
                       pcb->snd_nxt, pcb->rcv_nxt));
    tcp_debug_print_state(pcb->state);
  }    
  LWIP_DEBUGF(TCP_DEBUG, ("TIME-WAIT PCB states:\n"));
  for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) {
    LWIP_DEBUGF(TCP_DEBUG, ("Local port %u, foreign port %u snd_nxt %lu rcv_nxt %lu ",
                       pcb->local_port, pcb->remote_port,
                       pcb->snd_nxt, pcb->rcv_nxt));
    tcp_debug_print_state(pcb->state);
  }    
}

int
tcp_pcbs_sane(void)
{
  struct tcp_pcb *pcb;
  for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) {
//    LWIP_ASSERT("tcp_pcbs_sane: active pcb->state != CLOSED", pcb->state != CLOSED);
//    LWIP_ASSERT("tcp_pcbs_sane: active pcb->state != LISTEN", pcb->state != LISTEN);
//    LWIP_ASSERT("tcp_pcbs_sane: active pcb->state != TIME-WAIT", pcb->state != TIME_WAIT);
  }
  for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) {
    LWIP_ASSERT("tcp_pcbs_sane: tw pcb->state == TIME-WAIT", pcb->state == TIME_WAIT);
  }
  return 1;
}
#endif /* TCP_DEBUG */










?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一卡二卡三卡四卡无卡久久| 奇米亚洲午夜久久精品| 日韩视频永久免费| 色综合久久中文字幕综合网| 天堂久久久久va久久久久| 一区二区三区在线免费播放| 1区2区3区国产精品| 一区二区三区不卡视频| 天堂久久久久va久久久久| 午夜精品久久久久| 狠狠色狠狠色综合系列| 成人免费看片app下载| 91丝袜美腿高跟国产极品老师| 成人黄色软件下载| 欧美性猛交xxxx乱大交退制版| 91蜜桃婷婷狠狠久久综合9色| 日本国产一区二区| 555www色欧美视频| 国产精品毛片久久久久久久| 亚洲精品国产一区二区三区四区在线 | 日韩高清欧美激情| 国产精品888| 欧美久久一区二区| 国产喂奶挤奶一区二区三区| 亚洲视频免费在线观看| 蜜乳av一区二区| 一本一道久久a久久精品| 久久影院午夜论| 日本中文字幕一区| 99精品国产99久久久久久白柏| 91精品国产免费| 亚洲午夜一二三区视频| 粉嫩在线一区二区三区视频| 色综合久久99| 亚洲欧美日韩国产综合在线| 日本欧美一区二区三区| 精品视频全国免费看| 日本一区二区三区dvd视频在线| 日韩码欧中文字| 97成人超碰视| 一区二区三区在线视频免费观看| 粉嫩久久99精品久久久久久夜| 欧美日韩中字一区| 亚洲成av人片www| 欧美一级黄色大片| 日韩高清电影一区| 欧美一区二区三区婷婷月色| 97aⅴ精品视频一二三区| 麻豆一区二区在线| 国产一区二区免费在线| 日韩欧美综合在线| 狠狠网亚洲精品| 精品国产在天天线2019| 国产成人一区二区精品非洲| 国产免费久久精品| 欧美在线视频日韩| 精品午夜久久福利影院| 久久九九久久九九| 欧美性色综合网| 紧缚捆绑精品一区二区| 久久久久久亚洲综合| 男男视频亚洲欧美| 欧美激情在线一区二区三区| 成人免费福利片| 日韩精品成人一区二区三区| 精品成人一区二区三区四区| 国产精品99久久久久久久vr | 午夜亚洲福利老司机| 717成人午夜免费福利电影| 国产精品77777| 日韩在线一区二区| 亚洲男同1069视频| 欧美国产一区二区在线观看| 51精品秘密在线观看| 成人免费电影视频| 国产精品影视网| 久久se精品一区精品二区| 亚洲精品国产无天堂网2021| 精品福利在线导航| 欧美高清www午色夜在线视频| 成人黄色软件下载| 成人av午夜影院| 高清国产一区二区| 国产一区二区免费视频| 久久国产三级精品| 久久av资源站| 激情欧美一区二区三区在线观看| 亚洲人成影院在线观看| 中文av一区特黄| 国产精品伦一区二区三级视频| 久久久久久麻豆| 日韩免费观看高清完整版| 欧美一卡在线观看| 国产人伦精品一区二区| 欧美激情艳妇裸体舞| 国产精品久久夜| 亚洲最新在线观看| 美女视频网站久久| 国产美女视频一区| 99视频有精品| 欧美日韩的一区二区| 精品女同一区二区| 精品国产一区二区三区不卡| 国产日韩欧美综合在线| 国产精品成人免费在线| 亚洲一区二区综合| 久久国产精品露脸对白| 国产91富婆露脸刺激对白 | 中文字幕不卡在线| 亚洲一区二区三区国产| 国产真实乱对白精彩久久| 不卡的av电影| 精品国产乱码久久久久久图片| 国产精品网曝门| 天天av天天翘天天综合网| 国产 日韩 欧美大片| 91精品国产91综合久久蜜臀| 欧美激情一区三区| 亚洲精品国产第一综合99久久| 国产一区美女在线| 在线观看日韩精品| 亚洲三级免费观看| 99r精品视频| 亚洲国产精品激情在线观看 | 欧美精品久久久久久久久老牛影院| 久久人人97超碰com| 免费成人av在线播放| 亚洲色图在线播放| 亚洲成人自拍偷拍| 欧美精品乱码久久久久久| 欧美亚洲动漫制服丝袜| 欧美一区二区三区白人| 亚洲精品一卡二卡| 在线观看亚洲精品| 亚洲视频一区在线| 91视频免费观看| 亚洲免费av高清| 欧美精三区欧美精三区 | 国产成人av电影免费在线观看| 欧美一级片免费看| 久久se精品一区精品二区| 精品不卡在线视频| 成人h精品动漫一区二区三区| 国产精品免费人成网站| 99精品一区二区三区| 久久久亚洲午夜电影| av电影天堂一区二区在线观看| 国产精品丝袜91| 99精品久久久久久| 亚洲成人av免费| 日韩一区二区在线观看视频播放| 蜜桃久久精品一区二区| 国产三级久久久| 5858s免费视频成人| 国产精品一区二区果冻传媒| 亚洲欧美日韩一区二区三区在线观看 | 日韩主播视频在线| 26uuu色噜噜精品一区| 99精品久久99久久久久| 日本中文字幕不卡| 亚洲欧洲性图库| 欧美成人乱码一区二区三区| 色狠狠一区二区三区香蕉| 秋霞成人午夜伦在线观看| 国产精品久久久久桃色tv| 欧美日韩免费在线视频| 国产米奇在线777精品观看| 亚洲午夜在线电影| 亚洲日本韩国一区| 精品粉嫩aⅴ一区二区三区四区| 欧美在线一区二区三区| 国产中文一区二区三区| 人人精品人人爱| 亚洲图片欧美色图| 亚洲大片精品永久免费| 亚洲人吸女人奶水| 国产精品传媒入口麻豆| 中文字幕不卡三区| 欧美激情综合五月色丁香 | 久久精品国产成人一区二区三区| 午夜视频在线观看一区二区三区| 国产欧美精品一区二区三区四区| 欧美成人国产一区二区| 精品对白一区国产伦| 日韩欧美中文字幕制服| 久久综合久色欧美综合狠狠| 日韩午夜激情av| 国产欧美久久久精品影院| 久久综合久久99| 国产精品第一页第二页第三页| 中文字幕一区二区三中文字幕| 日本一区免费视频| 一区二区三区在线观看视频| 五月婷婷另类国产| 精品亚洲免费视频| 色噜噜狠狠成人中文综合| 欧美男人的天堂一二区| 久久精品视频一区二区| 亚洲国产精品一区二区久久 | 欧美日韩一区二区三区免费看|