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

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

?? datagram.c

?? An implementation of the TCP/IP protocol suite for the LINUX operating system. INET is implemented u
?? C
字號:
  1 /*
  2  *      SUCS    NET2 Debugged.
  3  *
  4  *      Generic datagram handling routines. These are generic for all protocols. Possibly a generic IP version on top
  5  *      of these would make sense. Not tonight however 8-).
  6  *      This is used because UDP, RAW, PACKET and the to be released IPX layer all have identical select code and mostly
  7  *      identical recvfrom() code. So we share it here. The select was shared before but buried in udp.c so I moved it.
  8  *
  9  *      Authors:        Alan Cox <iiitac@pyr.swan.ac.uk>. (datagram_select() from old udp.c code)
 10  *
 11  *      Fixes:
 12  *              Alan Cox        :       NULL return from skb_peek_copy() understood
 13  *              Alan Cox        :       Rewrote skb_read_datagram to avoid the skb_peek_copy stuff.
 14  *              Alan Cox        :       Added support for SOCK_SEQPACKET. IPX can no longer use the SO_TYPE hack but
 15  *                                      AX.25 now works right, and SPX is feasible.
 16  *              Alan Cox        :       Fixed write select of non IP protocol crash.
 17  */
 18 
 19 #include <linux/config.h>
 20 #include <linux/types.h>
 21 #include <linux/kernel.h>
 22 #include <asm/segment.h>
 23 #include <asm/system.h>
 24 #include <linux/mm.h>
 25 #include <linux/interrupt.h>
 26 #include <linux/in.h>
 27 #include <linux/errno.h>
 28 #include <linux/sched.h>
 29 #include "inet.h"
 30 #include "dev.h"
 31 #include "ip.h"
 32 #include "protocol.h"
 33 #include "arp.h"
 34 #include "route.h"
 35 #include "tcp.h"
 36 #include "udp.h"
 37 #include "skbuff.h"
 38 #include "sock.h"
 39 
 40 
 41 /*
 42  *      Get a datagram skbuff, understands the peeking, nonblocking wakeups and possible
 43  *      races. This replaces identical code in packet,raw and udp, as well as the yet to
 44  *      be released IPX support. It also finally fixes the long standing peek and read
 45  *      race for datagram sockets. If you alter this routine remember it must be
 46  *      re-entrant.
 47  */
 48 
 49 struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, int noblock, int *err)
 50 {
 51         struct sk_buff *skb;
 52 
 53         /* Socket is inuse - so the timer doesn't attack it */
 54 restart:
 55         sk->inuse = 1;
 56         while(sk->rqueue == NULL)       /* No data */
 57         {
 58                 /* If we are shutdown then no more data is going to appear. We are done */
 59                 if (sk->shutdown & RCV_SHUTDOWN)
 60                 {
 61                         release_sock(sk);
 62                         *err=0;
 63                         return NULL;
 64                 }
 65 
 66                 if(sk->err)
 67                 {
 68                         release_sock(sk);
 69                         *err=-sk->err;
 70                         sk->err=0;
 71                         return NULL;
 72                 }
 73 
 74                 /* Sequenced packets can come disconnected. If so we report the problem */
 75                 if(sk->type==SOCK_SEQPACKET && sk->state!=TCP_ESTABLISHED)
 76                 {
 77                         release_sock(sk);
 78                         *err=-ENOTCONN;
 79                         return NULL;
 80                 }
 81 
 82                 /* User doesn't want to wait */
 83                 if (noblock)
 84                 {
 85                         release_sock(sk);
 86                         *err=-EAGAIN;
 87                         return NULL;
 88                 }
 89                 release_sock(sk);
 90 
 91                 /* Interrupts off so that no packet arrives before we begin sleeping.
 92                    Otherwise we might miss our wake up */
 93                 cli();
 94                 if (sk->rqueue == NULL)
 95                 {
 96                         interruptible_sleep_on(sk->sleep);
 97                         /* Signals may need a restart of the syscall */
 98                         if (current->signal & ~current->blocked)
 99                         {
100                                 sti();
101                                 *err=-ERESTARTSYS;
102                                 return(NULL);
103                         }
104                         if(sk->err != 0)        /* Error while waiting for packet
105                                                    eg an icmp sent earlier by the
106                                                    peer has finaly turned up now */
107                         {
108                                 *err = -sk->err;
109                                 sti();
110                                 sk->err=0;
111                                 return NULL;
112                         }
113                 }
114                 sk->inuse = 1;
115                 sti();
116           }
117           /* Again only user level code calls this function, so nothing interrupt level
118              will suddenely eat the rqueue */
119           if (!(flags & MSG_PEEK))
120           {
121                 skb=skb_dequeue(&sk->rqueue);
122                 if(skb!=NULL)
123                         skb->users++;
124                 else
125                         goto restart;   /* Avoid race if someone beats us to the data */
126           }
127           else
128           {
129                 cli();
130                 skb=skb_peek(&sk->rqueue);
131                 if(skb!=NULL)
132                         skb->users++;
133                 sti();
134                 if(skb==NULL)   /* shouldn't happen but .. */
135                         *err=-EAGAIN;
136           }
137           return skb;
138 }
139 
140 void skb_free_datagram(struct sk_buff *skb)
141 {
142         unsigned long flags;
143 
144         save_flags(flags);
145         cli();
146         skb->users--;
147         if(skb->users>0)
148         {
149                 restore_flags(flags);
150                 return;
151         }
152         /* See if it needs destroying */
153         if(skb->list == NULL)   /* Been dequeued by someone - ie its read */
154                 kfree_skb(skb,FREE_READ);
155         restore_flags(flags);
156 }
157 
158 void skb_copy_datagram(struct sk_buff *skb, int offset, char *to, int size)
159 {
160         /* We will know all about the fraglist options to allow >4K receives
161            but not this release */
162         memcpy_tofs(to,skb->h.raw+offset,size);
163 }
164 
165 /*
166  *      Datagram select: Again totally generic. Moved from udp.c
167  *      Now does seqpacket.
168  */
169 
170 int datagram_select(struct sock *sk, int sel_type, select_table *wait)
171 {
172         select_wait(sk->sleep, wait);
173         switch(sel_type)
174         {
175                 case SEL_IN:
176                         if (sk->type==SOCK_SEQPACKET && sk->state==TCP_CLOSE)
177                         {
178                                 /* Connection closed: Wake up */
179                                 return(1);
180                         }
181                         if (sk->rqueue != NULL || sk->err != 0)
182                         {       /* This appears to be consistent
183                                    with other stacks */
184                                 return(1);
185                         }
186                         return(0);
187 
188                 case SEL_OUT:
189                         if (sk->prot && sk->prot->wspace(sk) >= MIN_WRITE_SPACE)
190                         {
191                                 return(1);
192                         }
193                         if (sk->prot==NULL && sk->sndbuf-sk->wmem_alloc >= MIN_WRITE_SPACE)
194                         {
195                                 return(1);
196                         }
197                         return(0);
198 
199                 case SEL_EX:
200                         if (sk->err)
201                                 return(1); /* Socket has gone into error state (eg icmp error) */
202                         return(0);
203         }
204         return(0);
205 }
206 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人一级电影| 国产成人综合精品三级| 久久综合色鬼综合色| 一本大道av伊人久久综合| 美女视频黄 久久| 亚洲一区二区三区四区五区黄| 久久影院午夜论| 91精品国产一区二区人妖| eeuss国产一区二区三区| 久久99精品久久久久| 亚洲va中文字幕| 亚洲免费电影在线| 国产精品嫩草影院av蜜臀| 精品国产免费人成在线观看| 欧美日韩三级视频| 91国产视频在线观看| 成人福利视频网站| 国产一区 二区| 久久国产成人午夜av影院| 日韩影视精彩在线| 亚洲午夜激情网站| 亚洲激情图片一区| 成人欧美一区二区三区1314| 国产午夜亚洲精品理论片色戒| 日韩一区二区免费视频| 欧美日韩精品一区二区天天拍小说| 99久久综合色| av中文字幕不卡| 欧美不卡在线视频| 在线播放欧美女士性生活| 91精品办公室少妇高潮对白| 99久久精品费精品国产一区二区| 国产激情91久久精品导航| 国产伦精品一区二区三区免费迷| 麻豆成人91精品二区三区| 琪琪久久久久日韩精品| 日韩国产精品久久久| 免费人成精品欧美精品| 亚洲色欲色欲www| 亚洲精选在线视频| 亚洲最新在线观看| 婷婷国产在线综合| 免费看黄色91| 国产在线观看免费一区| 国产综合久久久久久久久久久久| 国产真实乱子伦精品视频| 国产在线播放一区| 成人av网站免费| 一本色道久久综合狠狠躁的推荐 | 亚洲欧美色图小说| 亚洲另类中文字| 亚洲精品视频免费看| 亚洲精品一二三区| 五月婷婷欧美视频| 久久aⅴ国产欧美74aaa| 国产风韵犹存在线视精品| 国产99精品在线观看| 91免费版在线| 欧美年轻男男videosbes| 欧美一区二区三区系列电影| 日韩欧美第一区| 国产亚洲欧洲997久久综合| 国产精品嫩草影院av蜜臀| 亚洲精品高清在线| 另类小说色综合网站| 国产91露脸合集magnet| 91影视在线播放| 91精品国产综合久久婷婷香蕉| 精品不卡在线视频| 亚洲欧洲综合另类在线| 日本中文字幕一区二区有限公司| 寂寞少妇一区二区三区| 2019国产精品| 亚洲免费视频中文字幕| 麻豆91在线播放免费| 成人国产精品免费| 91精品国产色综合久久久蜜香臀| 久久香蕉国产线看观看99| 亚洲女爱视频在线| 黄一区二区三区| 91久久精品网| 久久久久国产精品厨房| 樱花影视一区二区| 国产精品一区专区| 欧美在线三级电影| 久久久久国产免费免费| 亚洲国产日韩综合久久精品| 狠狠色综合色综合网络| 色88888久久久久久影院按摩| 欧美www视频| 亚洲一区二区在线免费观看视频| 国产一区二区不卡在线| 欧美乱妇20p| 中文字幕乱码久久午夜不卡 | 99视频在线精品| 日韩午夜在线影院| 一区二区三区中文字幕| 国产一区二区三区四区五区美女| 欧洲亚洲精品在线| 欧美国产1区2区| 精彩视频一区二区三区| 欧美日韩中文国产| 亚洲日韩欧美一区二区在线| 狠狠色丁香婷婷综合| 欧美久久一二区| 亚洲欧洲精品天堂一级| 国产精品资源网| 欧美一区二区私人影院日本| 99久久国产综合精品女不卡| 日韩欧美色电影| 亚洲国产成人av好男人在线观看| 成人小视频在线| 久久久久久久久久久99999| 性感美女极品91精品| 色婷婷久久一区二区三区麻豆| 久久久久久久久久久久久夜| 日本欧美一区二区| 欧美丰满少妇xxxbbb| 亚洲综合网站在线观看| 成人av一区二区三区| 欧美国产日韩a欧美在线观看 | 国产精品正在播放| 日韩欧美一级精品久久| 日韩国产在线一| 欧美性videosxxxxx| 亚洲欧美另类综合偷拍| jizzjizzjizz欧美| 中文字幕在线观看不卡| 成人av资源下载| 国产精品久久久久久久久免费樱桃| 国产一区二区三区综合| 欧美精品一区二区三区蜜桃视频| 全部av―极品视觉盛宴亚洲| 91精品国产一区二区三区蜜臀 | 国产999精品久久久久久绿帽| 精品福利一二区| 韩国v欧美v日本v亚洲v| 2欧美一区二区三区在线观看视频| 久久机这里只有精品| 欧美精品一区二区三区四区| 国产尤物一区二区在线| 欧美激情在线一区二区三区| 国产91在线观看| 综合久久综合久久| 欧美性色aⅴ视频一区日韩精品| 亚洲福利国产精品| 欧美一区二区观看视频| 极品少妇一区二区三区精品视频 | 国产女人18水真多18精品一级做| 国产高清无密码一区二区三区| 国产欧美日韩在线看| 99精品黄色片免费大全| 亚洲一区中文日韩| 91精品免费在线| 国产精品自拍av| 中文字幕一区二区三区不卡在线 | 久久女同互慰一区二区三区| 国产呦萝稀缺另类资源| 国产精品麻豆一区二区| 在线视频国内一区二区| 琪琪久久久久日韩精品| 国产视频一区在线播放| 色综合天天综合网天天看片| 亚洲国产欧美在线| 欧美va亚洲va在线观看蝴蝶网| 国产99精品视频| 亚洲午夜电影在线观看| 久久久久久日产精品| 91蜜桃免费观看视频| 日本色综合中文字幕| 亚洲国产精品激情在线观看| 欧美性猛交xxxxxx富婆| 麻豆91免费观看| 亚洲三级电影网站| 日韩欧美久久久| 9i看片成人免费高清| 奇米在线7777在线精品| 国产精品久久777777| 日韩一区二区在线观看视频| 成人精品小蝌蚪| 日本少妇一区二区| 亚洲欧美日韩在线不卡| 日韩精品专区在线影院观看| 91蜜桃传媒精品久久久一区二区 | 91在线云播放| 美国毛片一区二区三区| 亚洲欧洲日产国产综合网| 欧美一级国产精品| 91麻豆国产精品久久| 免费成人美女在线观看.| **性色生活片久久毛片| 欧美成人精品3d动漫h| 91麻豆视频网站| 国产盗摄一区二区三区| 天天色 色综合| 亚洲视频每日更新| 国产香蕉久久精品综合网| 91精品欧美福利在线观看| 色欧美日韩亚洲| 成人综合婷婷国产精品久久蜜臀|