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

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

?? fig-6-20.c

?? 計算機網絡第四版的實現源代碼
?? C
字號:
#define MAX_CONN 32	/* max number of simultaneous connections */#define MAX_MSG_SIZE 8192		/* largest message in bytes */#define MAX_PKT_SIZE 512		/* largest packet in bytes */#define TIMEOUT 20#define CRED 1#define OK 0#define ERR_FULL -1#define ERR_REJECT -2#define ERR_CLOSED -3#define LOW_ERR -3typedef int transport_address;typedef enum {CALL_REQ,CALL_ACC,CLEAR_REQ,CLEAR_CONF,DATA_PKT,CREDIT} pkt_type;typedef enum {IDLE,WAITING,QUEUED,ESTABLISHED,SENDING,RECEIVING,DISCONN} cstate;/* Global variables. */transport_address listen_address;	/* local address being listened to */int listen_conn;			/* connection identifier for listen */unsigned char data[MAX_PKT_SIZE];	/* scratch area for packet data */struct conn {  transport_address local_address, remote_address;  cstate state;				/* state of this connection */  unsigned char *user_buf_addr;		/* pointer to receive buffer */  int byte_count;			/* send/receive count */  int clr_req_received;			/* set when CLEAR_REQ packet received */  int timer;				/* used to time out CALL_REQ packets */  int credits;				/* number of messages that may be sent */} conn[MAX_CONN + 1];			/* slot 0 is not used */void sleep(void);			/* prototypes */void wakeup(void);void to_net(int cid, int q, int m, pkt_type pt, unsigned char *p, int bytes);void from_net(int *cid, int *q, int *m, pkt_type *pt, unsigned char *p, int *bytes);int listen(transport_address t){ /* User wants to listen for a connection. See if CALL_REQ has already arrived. */  int i, found = 0;  for (i = 1; i <= MAX_CONN; i++)	/* search the table for CALL_REQ */        if (conn[i].state == QUEUED && conn[i].local_address == t) {                found = i;                break;        }  if (found == 0) {        /* No CALL_REQ is waiting.  Go to sleep until arrival or timeout. */        listen_address = t;  sleep();  i = listen_conn ;  }  conn[i].state = ESTABLISHED;		/* connection is ESTABLISHED */  conn[i].timer = 0;			/* timer is not used */  listen_conn = 0;			/* 0 is assumed to be an invalid address */  to_net(i, 0, 0, CALL_ACC, data, 0);	/* tell net to accept connection */  return(i);				/* return connection identifier */}int connect(transport_address l, transport_address r){ /* User wants to connect to a remote process;  send CALL_REQ packet. */  int i;  struct conn *cptr;  data[0] = r;   data[1] = l;		/* CALL_REQ packet needs these */  i = MAX_CONN;				/* search table backward */  while (conn[i].state != IDLE && i > 1) i = i - 1;  if (conn[i].state == IDLE) {        /* Make a table entry that CALL_REQ has been sent. */        cptr = &conn[i];        cptr->local_address = l; cptr->remote_address = r;        cptr->state = WAITING; cptr->clr_req_received = 0;        cptr->credits = 0; cptr->timer = 0;        to_net(i, 0, 0, CALL_REQ, data, 2);        sleep();			/* wait for CALL_ACC or CLEAR_REQ */        if (cptr->state == ESTABLISHED) return(i);        if (cptr->clr_req_received) {                /* Other side refused call. */                cptr->state = IDLE;	/* back to IDLE state */                to_net(i, 0, 0, CLEAR_CONF, data, 0);                return(ERR_REJECT);        }  } else return(ERR_FULL);		/* reject CONNECT: no table space */}int send(int cid, unsigned char bufptr[], int bytes){ /* User wants to send a message. */  int i, count, m;  struct conn *cptr = &conn[cid];  /* Enter SENDING state. */  cptr->state = SENDING;  cptr->byte_count = 0;			/* # bytes sent so far this message */  if (cptr->clr_req_received == 0 && cptr->credits == 0) sleep();  if (cptr->clr_req_received == 0) {        /* Credit available; split message into packets if need be. */        do {                if (bytes - cptr->byte_count > MAX_PKT_SIZE) {	/* multipacket message */                        count = MAX_PKT_SIZE;  m = 1;	/* more packets later */                } else {		/* single packet message */                        count = bytes - cptr->byte_count;  m = 0; /* last pkt of this message */                }                for (i = 0; i < count; i++) data[i] = bufptr[cptr->byte_count + i];                to_net(cid, 0, m, DATA_PKT, data, count);	/* send 1 packet */                cptr->byte_count = cptr->byte_count + count;	/* increment bytes sent so far */        } while (cptr->byte_count < bytes); /* loop until whole message sent */        cptr->credits--;		/* each message uses up one credit */        cptr->state = ESTABLISHED;        return(OK);  } else {        cptr->state = ESTABLISHED;        return(ERR_CLOSED);		/* send failed: peer wants to disconnect */  }}int receive(int cid, unsigned char bufptr[], int *bytes){ /* User is prepared to receive a message. */  struct conn *cptr = &conn[cid];  if (cptr->clr_req_received == 0) {        /* Connection still established; try to receive. */        cptr->state = RECEIVING;        cptr->user_buf_addr = bufptr;        cptr->byte_count = 0;        data[0] = CRED;        data[1] = 1;        to_net(cid, 1, 0, CREDIT, data, 2); /* send credit */        sleep();			/* block awaiting data */        *bytes = cptr->byte_count;  }  cptr->state = ESTABLISHED;  return(cptr->clr_req_received ? ERR_CLOSED : OK);}int disconnect(int cid){ /* User wants to release a connection. */  struct conn *cptr = &conn[cid];  if (cptr->clr_req_received) {		/* other side initiated termination */        cptr->state = IDLE;		/* connection is now released */        to_net(cid, 0, 0, CLEAR_CONF, data, 0);  } else {				/* we initiated termination */        cptr->state = DISCONN;		/* not released until other side agrees */        to_net(cid, 0, 0, CLEAR_REQ, data, 0);  }  return(OK);}void packet_arrival(void){ /* A packet has arrived, get and process it. */  int cid;				/* connection on which packet arrived */  int count, i, q, m;  pkt_type ptype;     /* CALL_REQ, CALL_ACC, CLEAR_REQ, CLEAR_CONF, DATA_PKT, CREDIT */  unsigned char data[MAX_PKT_SIZE];	/* data portion of the incoming packet */  struct conn *cptr;  from_net(&cid, &q, &m, &ptype, data, &count);	/* go get it */  cptr = &conn[cid];  switch (ptype) {     case CALL_REQ:			/* remote user wants to establish connection */        cptr->local_address = data[0];  cptr->remote_address = data[1];        if (cptr->local_address == listen_address) {                listen_conn = cid;  cptr->state = ESTABLISHED;  wakeup();        } else {                cptr->state = QUEUED;  cptr->timer = TIMEOUT;        }        cptr->clr_req_received = 0;   cptr->credits = 0;        break;     case CALL_ACC:			/* remote user has accepted our CALL_REQ */        cptr->state = ESTABLISHED;        wakeup();        break;     case CLEAR_REQ:			/* remote user wants to disconnect or reject call */        cptr->clr_req_received = 1;        if (cptr->state == DISCONN) cptr->state = IDLE;	/* clear collision */        if (cptr->state ==  WAITING || cptr->state == RECEIVING || cptr->state == SENDING) wakeup();        break;     case CLEAR_CONF:			/* remote user agrees to disconnect */        cptr->state = IDLE;        break;     case CREDIT:			/* remote user is waiting for data */        cptr->credits += data[1];        if (cptr->state == SENDING) wakeup();        break;     case DATA_PKT:			/* remote user has sent data */        for (i = 0; i < count; i++) cptr->user_buf_addr[cptr->byte_count + i] = data[i];        cptr->byte_count += count;        if (m == 0 ) wakeup();  }}void clock(void){ /* The clock has ticked, check for timeouts of queued connect requests. */  int i;  struct conn *cptr;  for (i = 1; i <= MAX_CONN; i++) {        cptr = &conn[i];        if (cptr->timer > 0) {		/* timer was running */                cptr->timer--;                if (cptr->timer == 0) {	/* timer has now expired */                        cptr->state = IDLE;                        to_net(i, 0, 0, CLEAR_REQ, data, 0);                }        }  }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
a级精品国产片在线观看| 亚洲国产精品久久艾草纯爱| 欧美电影一区二区三区| 欧美日韩一区三区四区| 精品视频在线免费看| 一本色道久久综合亚洲aⅴ蜜桃| 99久久er热在这里只有精品15| 波多野结衣中文字幕一区| 国产99精品视频| a在线播放不卡| 欧美专区在线观看一区| 欧美日韩dvd在线观看| 欧美乱妇一区二区三区不卡视频| 日韩一区二区视频在线观看| 精品电影一区二区| 国产精品黄色在线观看| 亚洲一区二区av电影| 日韩精品国产欧美| 国产精品一线二线三线精华| 成人av在线网站| 在线观看一区二区精品视频| 欧美一区二视频| wwwwww.欧美系列| 亚洲精品中文在线影院| 男女性色大片免费观看一区二区| 国产精品一区二区三区四区| 91浏览器入口在线观看| 欧美一区二区日韩一区二区| 国产欧美日韩精品一区| 亚洲综合视频在线观看| 国产一区二区三区观看| 日本韩国欧美在线| 日韩一级二级三级精品视频| 中文字幕一区av| 免费在线视频一区| 成av人片一区二区| 日韩欧美一区二区免费| 椎名由奈av一区二区三区| 精彩视频一区二区| 欧美专区在线观看一区| 国产精品网友自拍| 欧美a级一区二区| 欧美熟乱第一页| 中文字幕精品三区| 美女视频黄 久久| 欧洲人成人精品| 国产精品久久毛片a| 日本在线不卡一区| 91国偷自产一区二区开放时间 | 成人亚洲精品久久久久软件| 在线看不卡av| 亚洲视频 欧洲视频| 精品在线免费观看| 欧美久久高跟鞋激| 一区二区三区av电影| 99国内精品久久| 日本一区二区三区免费乱视频| 日本va欧美va精品| 欧美精品久久99| 亚洲永久免费av| 91视频观看视频| 国产精品高清亚洲| 成人综合日日夜夜| 久久久高清一区二区三区| 日韩高清不卡一区二区三区| 欧美日韩精品一区二区三区四区| 一区二区成人在线视频 | 亚洲欧美福利一区二区| 成人免费毛片片v| 国产视频一区二区三区在线观看| 国产在线视频一区二区三区| 精品伦理精品一区| 久久99国产乱子伦精品免费| 欧美一区欧美二区| 免费观看在线色综合| 日韩精品影音先锋| 国产精品亚洲午夜一区二区三区| 久久夜色精品一区| 丰满岳乱妇一区二区三区| 国产无遮挡一区二区三区毛片日本| 国产在线视频一区二区三区| 国产欧美日韩三区| 99re热这里只有精品视频| 亚洲精选视频在线| 91精品国产综合久久国产大片| 日韩精品成人一区二区在线| 日韩欧美电影一区| 国产91高潮流白浆在线麻豆| 亚洲特级片在线| 欧美日韩高清影院| 国产在线视频精品一区| 中文在线一区二区| 在线观看视频一区二区| 美女脱光内衣内裤视频久久网站 | 欧美成人伊人久久综合网| 久久成人羞羞网站| 中文成人av在线| 欧美日韩在线亚洲一区蜜芽| 日本一区中文字幕| 国产免费成人在线视频| 欧美伊人久久久久久午夜久久久久| 蜜桃一区二区三区在线观看| 中文字幕欧美日本乱码一线二线| 欧美在线观看视频一区二区| 蜜臀a∨国产成人精品| 国产精品免费视频一区| 欧美日韩国产bt| 国产suv精品一区二区883| 亚洲风情在线资源站| 久久久精品日韩欧美| 欧美中文字幕亚洲一区二区va在线 | 精品国产一区a| 91在线丨porny丨国产| 麻豆高清免费国产一区| 亚洲欧洲综合另类| 精品美女被调教视频大全网站| a在线播放不卡| 国产乱码精品一区二区三区av| 一区二区三区在线免费| 精品99999| 欧美精品乱码久久久久久| 成人一区二区三区中文字幕| 视频一区视频二区在线观看| 中文av字幕一区| 欧美精品一区二区精品网| 欧美色图激情小说| www.欧美.com| 国产成人综合网| 精品一区二区三区在线视频| 亚洲一二三区在线观看| 亚洲素人一区二区| 国产精品久久久久四虎| 精品国产伦一区二区三区观看体验| 在线影视一区二区三区| 成人午夜又粗又硬又大| 国产尤物一区二区在线| 免费成人美女在线观看| 日日噜噜夜夜狠狠视频欧美人 | 日韩午夜在线观看| 欧美日韩国产综合草草| 色天天综合色天天久久| 成人午夜激情视频| 国产成人在线免费| 国产美女在线精品| 韩国一区二区三区| 国产一区二区三区av电影| 蜜臀精品一区二区三区在线观看| 性欧美大战久久久久久久久| 亚洲国产一区二区三区青草影视| 亚洲女女做受ⅹxx高潮| ...中文天堂在线一区| 国产精品国产三级国产aⅴ原创| 国产亚洲午夜高清国产拍精品| 欧美va亚洲va香蕉在线 | 成人av在线资源网站| 岛国一区二区三区| 99这里都是精品| 99久久国产免费看| 在线免费一区三区| 欧美老女人第四色| 欧美成人性战久久| 国产午夜亚洲精品午夜鲁丝片| 国产三级久久久| 国产精品国产馆在线真实露脸| 亚洲欧美影音先锋| 亚洲成av人片| 久草中文综合在线| 国产精品99久久久久久久女警 | 99国产精品久久久久久久久久久| 成人av午夜电影| 欧美午夜精品免费| 日韩三区在线观看| 国产日本亚洲高清| 亚洲私人黄色宅男| 日本aⅴ免费视频一区二区三区| 久久精品噜噜噜成人av农村| 成人综合在线观看| 欧美亚洲国产一区二区三区va| 日韩午夜在线影院| 中文字幕亚洲在| 蜜桃视频在线一区| 波多野结衣精品在线| 欧美精品在线一区二区三区| 久久伊人蜜桃av一区二区| 日韩久久一区二区| 美腿丝袜亚洲色图| 91免费国产视频网站| 精品日韩一区二区三区| 最新成人av在线| 久久99国产精品尤物| 色综合久久久久综合体桃花网| 欧美一区二区三区不卡| 亚洲日本中文字幕区| 精品一区二区久久| 欧美亚洲尤物久久| 欧美激情在线观看视频免费| 日日摸夜夜添夜夜添精品视频| 成人中文字幕在线| 精品日韩一区二区| 亚洲一级电影视频|