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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? io.c

?? 基于minigui的瀏覽器. 這是最新版本.
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
/* * Remove an IO from ValidIOs */static void IO_del(IOData_t *io){   a_Klist_remove(ValidIOs, io->Key);}/* * Return a io by its Key (NULL if not found) */static IOData_t *IO_get(gint Key){   return a_Klist_get_data(ValidIOs, Key);}/* * Free an 'io' struct */static void IO_free(IOData_t *io){   g_return_if_fail(IO_get(io->Key) == NULL);   if (io->Flags & IOFlag_FreeIOBuf)      a_IO_set_buf(io, NULL, 0);   g_free(io);}/* * Close an open FD, and remove io controls. * (This function can be used for Close and Abort operations) */static void IO_close_fd(IOData_t *io, gint CloseCode){   gint st;   /* With HTTP, if we close the writing part, the reading one also gets    * closed! (other clients may set 'IOFlag_ForceClose') */   if ((io->Flags & IOFlag_ForceClose) || (CloseCode != IO_StopWr))      do         st = close(io->FD);      while (st < 0 && errno == EINTR);   /* Remove this IOData_t reference, from our ValidIOs list    * We don't deallocate it here, just remove from the list.*/   IO_del(io);   /* Stop the polling on this FD */   g_source_remove(io->watch_id);}/* * Abort an open FD. *  This function is called to abort a FD connection due to an IO error *  or just because the connection is not required anymore. */static gboolean IO_abort(IOData_t *io){   /* Close and finish this FD's activity */   IO_close_fd(io, IO_StopRdWr);   return FALSE;}/* * Read data from a file descriptor into a specific buffer */static gboolean IO_read(IOData_t *io){   ssize_t St;   gboolean ret, DataPending;   DEBUG_MSG(3, "  IO_read\n");   do {      ret = FALSE;      DataPending = FALSE;      St = read(io->FD, io->Buf, io->BufSize);      io->Status = St;      DEBUG_MSG(3, "  IO_read: %s [errno %d] [St %ld]\n",                g_strerror(errno), errno, (glong)St);      if ( St < 0 ) {         /* Error */         io->Status = -errno;         if (errno == EINTR)            continue;         else if (errno == EAGAIN)            ret = TRUE;      } else if ( St == 0 ) {         /* All data read (EOF) */         IO_close_fd(io, IO_StopRd);         a_IO_ccc(OpEnd, 2, FWD, io->Info, io, NULL);      } else if ( (size_t)St < io->BufSize ){         /* We have all the new data */         a_IO_ccc(OpSend, 2, FWD, io->Info, io, NULL);         ret = TRUE;      } else { /* BytesRead == io->BufSize */         /* We have new data, and maybe more... */         a_IO_ccc(OpSend, 2, FWD, io->Info, io, NULL);         DataPending = TRUE;      }   } while (DataPending);   return ret;}/* * Write data, from a specific buffer, into a file descriptor * todo: Implement IOWrites. */static gboolean IO_write(IOData_t *io){   ssize_t St;   gboolean ret, DataPending;   DEBUG_MSG(3, "  IO_write\n");   do {      ret = FALSE;      DataPending = FALSE;      St = write(io->FD, io->Buf, io->BufSize);      io->Status = St;      DEBUG_MSG(3, "  IO_write: %s [errno %d] [St %ld]\n",                g_strerror(errno), errno, (glong)St);      if ( St < 0 ) {         /* Error */         io->Status = -errno;         if (errno == EINTR) {            continue;         } else if (errno == EAGAIN) {            DEBUG_MSG(4, "  IO_write: EAGAIN\n");            ret = TRUE;         }      } else if ( (size_t)St < io->BufSize ){         /* Not all data written */         io->BufSize -= St;         io->Buf = (gchar *)io->Buf + St;         DataPending = TRUE;         DEBUG_MSG(4, "  IO_write: Changing io->Buf (%ld)\n", (glong)St);      } else {         /* All data in buffer written */         if ( io->Op == IOWrite ) {            /* Single write */            IO_close_fd(io, IO_StopWr);            a_IO_ccc(OpEnd, 1, FWD, io->Info, io, NULL);         } else if ( io->Op == IOWrites ) {            /* Writing in small chunks */            /* clear the buffer, and wait for a new chunk */            a_IO_set_buf(io, NULL, 0);            if (io->Flags & IOFlag_ForceClose) {               IO_close_fd(io, IO_StopWr);               a_IO_ccc(OpEnd, 1, FWD, io->Info, io, NULL);            }         }      }   } while (DataPending);   return ret;}/* * Handle background IO for a given FD (reads | writes) * (This function gets called by glib when there's activity in the FD) */static gboolean IO_callback(GIOChannel *src, GIOCondition cond, gpointer data){   gboolean ret = FALSE;   gint io_key = GPOINTER_TO_INT(data);   IOData_t *io = IO_get(io_key);   /* IO_print_cond_status("IO_callback: ", cond, src, io_key); */   /* There should be no more glib events on already closed FDs  --Jcid */   if ( io == NULL ) {      g_warning("IO_callback: call on already closed io!\n");      g_assert_not_reached();      return FALSE;   }   if ( cond & (G_IO_IN | G_IO_HUP) ){      /* Read */      ret = IO_read(io);   } else if ( cond & G_IO_OUT ){           /* Write */      ret = IO_write(io);      io = IO_get(io_key);   /* IO_write may have freed 'io' */      if (io && io->Status == -EAGAIN)         ret = TRUE;   /* wait for another G_IO_OUT event... */   }   if ( cond & G_IO_ERR ){     /* Error */      /* IO_read/IO_write may free 'io' */      if ((io = IO_get(io_key))) {         io->Status = -EIO;         ret = IO_abort(io);      } else {         ret = FALSE;      }   } else if ( cond & (G_IO_PRI | G_IO_NVAL) ){      /* Ignore these exceptional conditions */      ret = FALSE;   }   return ret;}/* * Receive an IO request (IORead | IOWrite | IOWrites), * Set the GIOChannel and let it flow! */static void IO_submit(IOData_t *r_io){   /* Insert this IO in ValidIOs */   IO_ins(r_io);   /* Set FD to background and to close on exec. */   fcntl(r_io->FD, F_SETFL,         O_NONBLOCK | fcntl(r_io->FD, F_GETFL));   fcntl(r_io->FD, F_SETFD,         FD_CLOEXEC | fcntl(r_io->FD, F_GETFD));   if ( r_io->Op == IORead ) {      r_io->watch_id =         g_io_add_watch(r_io->GioCh, G_IO_IN | G_IO_ERR | G_IO_HUP,                        IO_callback, GINT_TO_POINTER (r_io->Key));      g_io_channel_unref(r_io->GioCh);   } else if ( r_io->Op == IOWrite || r_io->Op == IOWrites ) {      r_io->watch_id =         g_io_add_watch(r_io->GioCh, G_IO_OUT | G_IO_ERR,                        IO_callback, GINT_TO_POINTER (r_io->Key));      g_io_channel_unref(r_io->GioCh);   }}/* * Receive IO request (IORead | IOWrite | IOWrites), * and either start or keep it flowing. */static void IO_send(IOData_t *io){   if (!io->Key)      IO_submit(io);}/* * CCC function for the IO module * ( Data1 = IOData_t* ; Data2 = NULL ) */void a_IO_ccc(int Op, int Branch, int Dir, ChainLink *Info,              void *Data1, void *Data2){   IOData_t *io = Data1;   a_Chain_debug_msg("a_IO_ccc", Op, Branch, Dir);   if (Branch == 1) {      if (Dir == BCK) {         /* Write data */         switch (Op) {         case OpStart:            io->Info = Info;            Info->LocalKey = io;            break;         case OpSend:            /* this part submits the io */            IO_send(io);            break;         case OpAbort:            io = Info->LocalKey;            IO_abort(io);            IO_free(io);            g_free(Info);            break;         }      } else {  /* FWD */         /* Write-data status */         switch (Op) {         case OpEnd:            a_Chain_fcb(OpEnd, Info, io, NULL);            IO_free(io);            break;         case OpAbort:            a_Chain_fcb(OpAbort, Info, NULL, NULL);            IO_free(io);            break;         }      }   } else if (Branch == 2) {      if (Dir == BCK) {         /* This part catches the reader's messages */         switch (Op) {         case OpStart:            Info->LocalKey = io;            io->Info = Info;            IO_submit(io);            break;         case OpAbort:            io = Info->LocalKey;            IO_abort(io);            IO_free(io);            g_free(Info);            break;         }      } else {  /* FWD */         /* Send read-data */         switch (Op) {         case OpStart:            io->Info = Info;            Info->LocalKey = io;            a_Chain_link_new(Info, a_IO_ccc, FWD, a_Cache_ccc, 2, 2);            a_Chain_fcb(OpStart, Info, io, io->ExtData);            IO_submit(io);            break;         case OpSend:            a_Chain_fcb(OpSend, Info, io, NULL);            break;         case OpEnd:            a_Chain_fcb(OpEnd, Info, io, NULL);            IO_free(io);            break;         case OpAbort:            MSG(" Not implemented\n");            break;         }      }   } else if (Branch == 3) {      if (Dir == BCK) {         /* Write data using a thread */         switch (Op) {         case OpStart:            {            gint *fd = g_new(gint, 1);            *fd = *(int*)Data1; /* SockFD */            Info->LocalKey = fd;            break;            }         case OpEnd:            _MSG(" Info=%p Info->LocalKey=%p FD=%d Data1=%p\n",                 Info, Info->LocalKey, *(int*)Info->LocalKey, Data1);            a_IO_write_chunk(*(int*)Info->LocalKey, Info,                             NULL, (Data1) ? (size_t)1 : (size_t)0);            g_free(Info->LocalKey);            break;         case OpSend:            {            /* this part submits the data to the thread */            DataBuf *dbuf = Data1;            a_IO_write_chunk(*(int*)Info->LocalKey, Info,                             dbuf->Buf, (size_t)dbuf->Size);            break;            }         case OpAbort:            g_free(Info->LocalKey);            g_free(Info);            break;         }      } else {  /* FWD */         /* Write-data status */         switch (Op) {         case OpEnd:            a_Chain_fcb(OpEnd, Info, io, NULL);            IO_free(io);            break;         case OpAbort:            a_Chain_fcb(OpAbort, Info, NULL, NULL);            IO_free(io);            break;         }      }   }}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线亚洲欧美专区二区| 在线视频一区二区免费| 亚洲三级电影网站| 日韩一区二区三区电影在线观看 | 天天综合色天天综合| 精品福利二区三区| 欧美性做爰猛烈叫床潮| 国产不卡在线播放| 日韩av网站在线观看| 中文字幕日本乱码精品影院| 欧美大黄免费观看| 欧美午夜电影在线播放| 成人动漫一区二区| 精品中文字幕一区二区小辣椒| 亚洲三级小视频| 国产欧美一区二区精品性| 91.麻豆视频| 欧美三级三级三级爽爽爽| av在线一区二区三区| 麻豆国产精品官网| 日韩avvvv在线播放| 亚洲国产欧美一区二区三区丁香婷| 欧美激情资源网| 久久一留热品黄| 欧美一区二区三区影视| 欧美性生活影院| 色呦呦网站一区| 99久久精品免费看国产| 国产精品1区2区| 国产乱理伦片在线观看夜一区| 蜜臀va亚洲va欧美va天堂| 色综合久久久网| 色综合天天性综合| 99国产一区二区三精品乱码| 国产一区二区伦理| 国产麻豆午夜三级精品| 久久精品国产久精国产爱| 日韩二区三区四区| 麻豆成人免费电影| 麻豆国产91在线播放| 久久精品国产亚洲aⅴ| 久色婷婷小香蕉久久| 国内精品久久久久影院薰衣草 | 91精品国产入口| 欧美日韩和欧美的一区二区| 欧美亚洲综合色| 欧美日韩精品一区二区三区 | 91久久一区二区| 日本道在线观看一区二区| 欧美私模裸体表演在线观看| 欧美在线小视频| 91精品国产综合久久久久久久| 欧美一区二区网站| 精品国产乱码久久久久久牛牛 | 老司机精品视频在线| 久久精品国产久精国产爱| 日韩美女在线视频| 欧美一级片在线| 精品免费国产二区三区| 2021国产精品久久精品| 欧美激情一区三区| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 日韩毛片精品高清免费| 一区二区不卡在线视频 午夜欧美不卡在 | 国产精品自拍毛片| 久久久久久免费毛片精品| 久久久久久免费| 亚洲色欲色欲www在线观看| 亚洲成人av一区| 另类小说图片综合网| 国产成人超碰人人澡人人澡| 成人美女在线视频| 色中色一区二区| 欧美mv日韩mv国产网站app| 日本一区二区不卡视频| 亚洲国产精品麻豆| 精品一区二区三区影院在线午夜| 国产成人精品影视| 欧美午夜寂寞影院| 久久久精品国产免大香伊| 亚洲精品免费在线观看| 日本欧美加勒比视频| 成人国产精品视频| 欧美电影在线免费观看| 国产午夜亚洲精品羞羞网站| 亚洲一区视频在线观看视频| 精一区二区三区| 色网站国产精品| 精品国产第一区二区三区观看体验| 日韩一区在线播放| 精品一区二区在线免费观看| 色网综合在线观看| 久久精品日产第一区二区三区高清版| 一区二区三区四区不卡在线 | 亚洲靠逼com| 精品夜夜嗨av一区二区三区| 91丨porny丨首页| 精品美女被调教视频大全网站| 亚洲色图欧美偷拍| 国产精品一级二级三级| 欧美精品视频www在线观看 | 国产亚洲美州欧州综合国| 亚洲一区二区不卡免费| 国产成人在线免费| 欧美一区三区四区| 亚洲欧美色图小说| 风间由美中文字幕在线看视频国产欧美 | 欧美一级理论片| 亚洲精品高清在线观看| 国产福利一区二区三区视频在线| 欧美日韩黄色一区二区| 亚洲另类色综合网站| 成人黄色网址在线观看| 精品国产a毛片| 日日夜夜一区二区| 欧美在线一区二区| 悠悠色在线精品| 99精品国产91久久久久久| 中文字幕av不卡| 国产美女在线精品| 日韩精品中文字幕一区二区三区| 亚洲成人免费av| 欧美性大战久久久| 亚洲国产日韩一区二区| 在线视频综合导航| 亚洲一区在线观看网站| 在线观看日韩精品| 亚洲裸体xxx| 99久久综合99久久综合网站| 中文字幕免费在线观看视频一区| 狠狠色狠狠色综合| 久久久一区二区三区| 韩国精品主播一区二区在线观看 | 国产suv一区二区三区88区| 精品国产凹凸成av人导航| 久久99精品视频| 欧美大片一区二区三区| 久久99久久久欧美国产| 欧美电视剧在线观看完整版| 麻豆国产精品视频| 精品国产第一区二区三区观看体验| 另类小说一区二区三区| 精品国产髙清在线看国产毛片| 精品亚洲成a人| 国产日韩欧美亚洲| 成人黄色777网| 亚洲精品欧美在线| 91麻豆精品国产自产在线观看一区 | 成人网男人的天堂| 亚洲精选在线视频| 欧美日韩在线一区二区| 免费看黄色91| 久久精品夜夜夜夜久久| www.爱久久.com| 亚洲欧美aⅴ...| 欧美肥胖老妇做爰| 国产精品一区二区久激情瑜伽| 欧美国产亚洲另类动漫| 91农村精品一区二区在线| 亚洲综合色区另类av| 3d动漫精品啪啪| 国产成人午夜99999| 亚洲人成影院在线观看| 欧美喷水一区二区| 黄色资源网久久资源365| 国产精品亲子乱子伦xxxx裸| 在线观看日韩一区| 激情五月婷婷综合网| 中文字幕一区在线观看视频| 欧美性猛片aaaaaaa做受| 久久精品国产亚洲aⅴ| 一区在线观看免费| 91精品国产一区二区三区| 狠狠色丁香九九婷婷综合五月| 国产精品久久久久久久久快鸭 | 精品一区二区三区的国产在线播放| 国产亚洲精品aa午夜观看| 91色在线porny| 日韩成人一级片| 中文字幕不卡的av| 日韩一区二区在线免费观看| 成人精品视频一区二区三区 | 久久人人超碰精品| 91麻豆国产自产在线观看| 老司机精品视频在线| 亚洲老司机在线| 久久久噜噜噜久久中文字幕色伊伊 | 午夜一区二区三区视频| 久久久久久久性| 欧美日韩国产小视频在线观看| 国产大陆亚洲精品国产| 亚洲国产综合在线| 中文字幕av在线一区二区三区| 欧美日韩一本到| 粉嫩一区二区三区性色av| 日本欧美韩国一区三区| 亚洲激情五月婷婷| 国产午夜精品久久| 欧美一级高清片| 欧美日韩成人在线一区|