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

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

?? w32sock.cpp

?? FastDb是高效的內存數據庫系統
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
  while (size < min_size && state == ss_open)
  {
    RcvBuf->RcvWaitFlag = true;
    serialize();
    size_t begin = RcvBuf->DataBeg;
    size_t end = RcvBuf->DataEnd;
    size_t rcv_size = (begin <= end)
                      ? end - begin : sizeof(RcvBuf->Data) - begin;

    if (rcv_size > 0)
    {
      RcvBuf->RcvWaitFlag = false;

      if (rcv_size >= max_size)
      {
        memcpy(dst, &RcvBuf->Data[begin], max_size);
        begin += max_size;
        size += max_size;
      }
      else
      {
        memcpy(dst, &RcvBuf->Data[begin], rcv_size);
        begin += rcv_size;
        dst += rcv_size;
        size += rcv_size;
        max_size -= rcv_size;
      }

      RcvBuf->DataBeg = (begin == sizeof(RcvBuf->Data)) ? 0 : begin;

      if (RcvBuf->SndWaitFlag)
      {
        SetEvent(Signal[RTR]);
      }
    }
    else
    {
      HANDLE h[2];
      h[0] = Signal[RD];
      h[1] = Mutex;
      int rc = WaitForMultipleObjects(2, h, false, timeout);
      RcvBuf->RcvWaitFlag = false;

      if (rc != WAIT_OBJECT_0)
      {
        if (rc == WAIT_OBJECT_0+1 || rc == WAIT_ABANDONED+1)
        {
          Error = broken_pipe;
          ReleaseMutex(Mutex);
        }
        else if (rc == WAIT_TIMEOUT)
        {
          return size;
        }
        else
        {
          Error = GetLastError();
        }

        return -1;
      }

      if (timeout != WAIT_FOREVER)
      {
        time_t now = time(NULL);
        timeout = timeout >= (now - start)*1000
                  ? timeout - (now - start)*1000 : 0;
      }
    }
  }

  return size < min_size ? -1 : (int)size;
}


bool local_win_socket::write(const void* buf, size_t size)
{
  char* src = (char*)buf;
  Error = ok;

  while (size > 0 && state == ss_open)
  {
    SndBuf->SndWaitFlag = true;
    serialize();
    size_t begin = SndBuf->DataBeg;
    size_t end = SndBuf->DataEnd;
    size_t snd_size = (begin <= end)
                      ? sizeof(SndBuf->Data) - end - (begin == 0)
                      : begin - end - 1;

    if (snd_size > 0)
    {
      SndBuf->SndWaitFlag = false;

      if (snd_size >= size)
      {
        memcpy(&SndBuf->Data[end], src, size);
        end += size;
        size = 0;
      }
      else
      {
        memcpy(&SndBuf->Data[end], src, snd_size);
        end += snd_size;
        src += snd_size;
        size -= snd_size;
      }

      SndBuf->DataEnd = (end == sizeof(SndBuf->Data)) ? 0 : end;

      if (SndBuf->RcvWaitFlag)
      {
        SetEvent(Signal[TD]);
      }
    }
    else
    {
      HANDLE h[2];
      h[0] = Signal[RTT];
      h[1] = Mutex;
      int rc = WaitForMultipleObjects(2, h, false, INFINITE);
      RcvBuf->SndWaitFlag = false;

      if (rc != WAIT_OBJECT_0)
      {
        if (rc == WAIT_OBJECT_0+1 || rc == WAIT_ABANDONED+1)
        {
          Error = broken_pipe;
          ReleaseMutex(Mutex);
        }
        else
        {
          Error = GetLastError();
        }

        return false;
      }
    }
  }

  return size == 0;
}

#define MAX_ADDRESS_LEN 64

local_win_socket::local_win_socket(const char* address)
{
  Name = new char[strlen(address)+1];
  strcpy(Name, address);
  Error = not_opened;
  Mutex = NULL;
}

bool local_win_socket::open(int)
{
  char buf[MAX_ADDRESS_LEN];
  int  i;

  for (i = RD; i <= RTT; i++)
  {
    sprintf(buf, "%s.%c", Name, i + '0');
    Signal[i] = CreateEvent(FASTDB_SECURITY_ATTRIBUTES, false, false, buf);

    if (GetLastError() == ERROR_ALREADY_EXISTS)
    {
      WaitForSingleObject(Signal[i], 0);
    }

    if (!Signal[i])
    {
      Error = GetLastError();

      while (--i >= 0)
      {
        CloseHandle(Signal[i]);
      }

      return false;
    }
  }

  sprintf(buf, "%s.shr", Name);
  BufHnd = CreateFileMapping(INVALID_HANDLE_VALUE, FASTDB_SECURITY_ATTRIBUTES, PAGE_READWRITE,
                             0, sizeof(socket_buf)*2, buf);

  if (!BufHnd)
  {
    Error = GetLastError();

    for (i = RD; i <= RTT; i++)
    {
      CloseHandle(Signal[i]);
    }

    return false;
  }

  RcvBuf = (socket_buf*)MapViewOfFile(BufHnd, FILE_MAP_ALL_ACCESS, 0, 0, 0);

  if (!RcvBuf)
  {
    Error = GetLastError();
    CloseHandle(BufHnd);

    for (i = RD; i <= RTT; i++)
    {
      CloseHandle(Signal[i]);
    }

    return false;
  }

  SndBuf = RcvBuf+1;
  RcvBuf->DataBeg = RcvBuf->DataEnd = 0;
  SndBuf->DataBeg = SndBuf->DataEnd = 0;
  Error = ok;
  state = ss_open;
  return true;
}

local_win_socket::local_win_socket()
{
  int i;
  BufHnd = NULL;
  Mutex = NULL;
  Name = NULL;

  for (i = RD; i <= RTT; i++)
  {
    Signal[i] = CreateEvent(FASTDB_SECURITY_ATTRIBUTES, false, false, NULL);

    if (!Signal[i])
    {
      Error = GetLastError();

      while (--i >= 0)
      {
        CloseHandle(Signal[i]);
      }

      return;
    }
  }

  // create anonymous shared memory section
  BufHnd = CreateFileMapping(INVALID_HANDLE_VALUE, FASTDB_SECURITY_ATTRIBUTES, PAGE_READWRITE,
                             0, sizeof(socket_buf)*2, NULL);

  if (!BufHnd)
  {
    Error = GetLastError();

    for (i = RD; i <= RTT; i++)
    {
      CloseHandle(Signal[i]);
    }

    return;
  }

  RcvBuf = (socket_buf*)MapViewOfFile(BufHnd, FILE_MAP_ALL_ACCESS, 0, 0, 0);

  if (!RcvBuf)
  {
    Error = GetLastError();
    CloseHandle(BufHnd);

    for (i = RD; i <= RTT; i++)
    {
      CloseHandle(Signal[i]);
    }

    BufHnd = NULL;
    return;
  }

  SndBuf = RcvBuf+1;
  RcvBuf->DataBeg = RcvBuf->DataEnd = 0;
  SndBuf->DataBeg = SndBuf->DataEnd = 0;
  Error = ok;
  state = ss_open;
}

local_win_socket::~local_win_socket()
{
  close();
  delete[] Name;
}

socket_t* local_win_socket::accept()
{
  HANDLE h[2];

  if (state != ss_open)
  {
    return NULL;
  }

  connect_data* cdp = (connect_data*)SndBuf->Data;
  cdp->Pid = GetCurrentProcessId();
  cdp->Mutex = WatchDogMutex;

  while (true)
  {
    SetEvent(Signal[RTR]);
    int rc = WaitForSingleObject(Signal[RD], ACCEPT_TIMEOUT);

    if (rc == WAIT_OBJECT_0)
    {
      if (state != ss_open)
      {
        Error = not_opened;
        return NULL;
      }

      Error = ok;
      break;
    }
    else if (rc != WAIT_TIMEOUT)
    {
      Error = GetLastError();
      return NULL;
    }
  }

  local_win_socket* sock = new local_win_socket();
  sock->Mutex = ((connect_data*)RcvBuf->Data)->Mutex;
  accept_data* adp = (accept_data*)SndBuf->Data;
  adp->BufHnd = sock->BufHnd;

  for (int i = RD; i <= RTT; i++)
  {
    adp->Signal[(i + TD - RD) & RTT] = sock->Signal[i];
  }

  SetEvent(Signal[TD]);
  h[0] = Signal[RD];
  h[1] = sock->Mutex;
  int rc = WaitForMultipleObjects(2, h, false, INFINITE);

  if (rc != WAIT_OBJECT_0)
  {
    if (rc == WAIT_OBJECT_0+1 || rc == WAIT_ABANDONED+1)
    {
      Error = broken_pipe;
      ReleaseMutex(Mutex);
    }
    else
    {
      Error = GetLastError();
    }

    delete sock;
    return NULL;
  }

  return sock;
}

bool local_win_socket::cancel_accept()
{
  state = ss_shutdown;
  SetEvent(Signal[RD]);
  SetEvent(Signal[RTT]);
  return true;
}

char* local_win_socket::get_peer_name()
{
  if (state != ss_open)
  {
    Error = not_opened;
    return NULL;
  }

  char* addr = "127.0.0.1";
  char* addr_copy = new char[strlen(addr)+1];
  strcpy(addr_copy, addr);
  Error = ok;
  return addr_copy;
}

bool local_win_socket::is_ok()
{
  return !Error;
}

bool local_win_socket::close()
{
  if (state != ss_close)
  {
    state = ss_close;

    if (Mutex)
    {
      CloseHandle(Mutex);
    }

    for (int i = RD; i <= RTT; i++)
    {
      CloseHandle(Signal[i]);
    }

    UnmapViewOfFile(RcvBuf < SndBuf ? RcvBuf : SndBuf);
    CloseHandle(BufHnd);
    Error = not_opened;
  }

  return true;
}

void local_win_socket::get_error_text(char* buf, size_t buf_size)
{
  switch (Error)
  {

  case ok:
    strncpy(buf, "ok", buf_size);
    break;

  case not_opened:
    strncpy(buf, "socket not opened", buf_size);
    break;

  case broken_pipe:
    strncpy(buf, "connection is broken", buf_size);
    break;

  case timeout_expired:
    strncpy(buf, "connection timeout expired", buf_size);
    break;

  default:
#ifndef PHAR_LAP

    FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
                  NULL,
                  Error,
                  0,
                  buf,
                  buf_size,
                  NULL);
#else

    strncpy(buf, "Unknown socket error", buf_size);
#endif

  }
}


bool local_win_socket::shutdown()
{
  if (state == ss_open)
  {
    state = ss_shutdown;
    SetEvent(Signal[RD]);
    SetEvent(Signal[RTT]);
  }

  return true;
}

bool local_win_socket::connect(int max_attempts, time_t timeout)
{
  char buf[MAX_ADDRESS_LEN];
  int  rc, i, error_code;
  HANDLE h[2];

  for (i = RD; i <= RTT; i++)
  {
    sprintf(buf, "%s.%c", Name, ((i + TD - RD) & RTT) + '0');
    Signal[i] = CreateEvent(FASTDB_SECURITY_ATTRIBUTES, false, false, buf);

    if (!Signal[i])
    {
      Error = GetLastError();

      while (--i >= 0)
      {
        CloseHandle(Signal[i]);
      }

      return false;
    }
  }

  sprintf(buf, "%s.shr", Name);
  BufHnd = CreateFileMapping(INVALID_HANDLE_VALUE, FASTDB_SECURITY_ATTRIBUTES, PAGE_READWRITE,
                             0, sizeof(socket_buf)*2, buf);

  if (!BufHnd)
  {
    Error = GetLastError();

    for (i = RD; i <= RTT; i++)
    {
      CloseHandle(Signal[i]);
    }

    return false;
  }

  SndBuf = (socket_buf*)MapViewOfFile(BufHnd, FILE_MAP_ALL_ACCESS, 0, 0, 0);

  if (!SndBuf)
  {
    Error = GetLastError();

    for (i = RD; i <= RTT; i++)
    {
      CloseHandle(Signal[i]);
    }

    CloseHandle(BufHnd);
    return false;
  }

  RcvBuf = SndBuf+1;
  state = ss_shutdown;
  Mutex = NULL;

  rc = WaitForSingleObject(Signal[RTT],timeout*max_attempts*MILLISECOND);

  if (rc != WAIT_OBJECT_0)
  {
    error_code = rc == WAIT_TIMEOUT ? timeout_expired : GetLastError();
    close();
    Error = error_code;
    return false;
  }

  connect_data* cdp = (connect_data*)RcvBuf->Data;
  HANDLE hServer = OpenProcess(STANDARD_RIGHTS_REQUIRED|PROCESS_DUP_HANDLE,
                               false, cdp->Pid);

  if (!hServer)
  {
    error_code = GetLastError();
    close();
    Error = error_code;
    return false;
  }

  HANDLE hSelf = GetCurrentProcess();

  if (!DuplicateHandle(hServer, cdp->Mutex, hSelf, &Mutex,
                       0, false, DUPLICATE_SAME_ACCESS) ||
      !DuplicateHandle(hSelf, WatchDogMutex, hServer,
                       &((connect_data*)SndBuf->Data)->Mutex,
                       0, false, DUPLICATE_SAME_ACCESS))
  {
    error_code = GetLastError();
    CloseHandle(hServer);
    close();
    Error = error_code;
    return false;
  }

  SetEvent(Signal[TD]);
  h[0] = Signal[RD];
  h[1] = Mutex;
  rc = WaitForMultipleObjects(2, h, false, INFINITE);

  if (rc != WAIT_OBJECT_0)
  {
    if (rc == WAIT_OBJECT_0+1 || rc == WAIT_ABANDONED+1)
    {
      error_code = broken_pipe;
      ReleaseMutex(Mutex);
    }
    else
    {
      error_code = GetLastError();
    }

    CloseHandle(hServer);
    close();
    Error = error_code;
    return false;
  }

  accept_data ad = *(accept_data*)RcvBuf->Data;

  SetEvent(Signal[TD]);

  for (i = RD; i <= RTT; i++)
  {
    CloseHandle(Signal[i]);
  }

  UnmapViewOfFile(SndBuf);
  CloseHandle(BufHnd);
  BufHnd = NULL;

  if (!DuplicateHandle(hServer, ad.BufHnd, hSelf, &BufHnd,
                       0, false, DUPLICATE_SAME_ACCESS))
  {
    Error = GetLastError();
    CloseHandle(hServer);
    CloseHandle(Mutex);
    return false;
  }
  else
  {
    for (i = RD; i <= RTT; i++)
    {
      if (!DuplicateHandle(hServer, ad.Signal[i],
                           hSelf, &Signal[i],
                           0, false, DUPLICATE_SAME_ACCESS))
      {
        Error = GetLastError();
        CloseHandle(hServer);
        CloseHandle(BufHnd);
        CloseHandle(Mutex);

        while (--i >= 0)
          CloseHandle(Signal[1]);

        return false;
      }
    }
  }

  CloseHandle(hServer);

  SndBuf = (socket_buf*)MapViewOfFile(BufHnd, FILE_MAP_ALL_ACCESS, 0, 0, 0);

  if (!SndBuf)
  {
    Error = GetLastError();
    CloseHandle(BufHnd);
    CloseHandle(Mutex);

    for (i = RD; i <= RTT; i++)
    {
      CloseHandle(Signal[i]);
    }

    return false;
  }

  RcvBuf = SndBuf+1;
  Error = ok;
  state = ss_open;
  return true;
}

int local_win_socket::get_handle()
{
  return -1;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av一区二区三区| 国产日韩欧美一区二区三区综合| 91老师片黄在线观看| 成人av资源站| fc2成人免费人成在线观看播放| 丁香天五香天堂综合| 国产成+人+日韩+欧美+亚洲| 丁香婷婷综合色啪| eeuss鲁片一区二区三区在线看| 不卡视频一二三| 97se亚洲国产综合自在线观| av在线播放一区二区三区| 成人免费视频免费观看| 91视频一区二区| 欧美色综合网站| 7777精品伊人久久久大香线蕉的 | 视频一区视频二区中文| 午夜av区久久| 美洲天堂一区二卡三卡四卡视频 | 精品一区免费av| 国产乱人伦精品一区二区在线观看| 精品一区二区免费| 国内精品在线播放| 国产成人亚洲综合a∨猫咪| a亚洲天堂av| 在线精品视频免费观看| 欧美精品vⅰdeose4hd| 欧美电影在哪看比较好| 精品蜜桃在线看| 国产精品视频免费看| 亚洲综合一区二区三区| 免费精品视频在线| 国产麻豆视频精品| 色综合久久88色综合天天| 欧美日韩久久一区| 久久在线观看免费| 国产精品情趣视频| 亚洲成人午夜影院| 激情成人综合网| 99re6这里只有精品视频在线观看| 91久久精品一区二区| 欧美一二三在线| 中文字幕av免费专区久久| 一区二区三区在线免费视频| 日韩1区2区日韩1区2区| 国产99久久精品| 欧美日韩精品是欧美日韩精品| 精品久久久久久久久久久院品网| 欧美国产精品中文字幕| 亚洲第一搞黄网站| 国产91精品免费| 欧美三片在线视频观看| 国产日韩欧美电影| 亚洲成在人线免费| 成人免费av资源| 在线成人高清不卡| 中文字幕欧美一区| 美女视频免费一区| 色噜噜久久综合| 日本一区二区三区视频视频| 午夜婷婷国产麻豆精品| 成人性视频免费网站| 欧美一区二区三区免费观看视频| 国产精品九色蝌蚪自拍| 男人操女人的视频在线观看欧美| 99久久久精品| 精品国产一区二区在线观看| 亚洲国产精品影院| 福利91精品一区二区三区| 在线综合+亚洲+欧美中文字幕| 国产精品久久久久久久久快鸭| 免费欧美高清视频| 一本大道久久a久久综合| 国产无人区一区二区三区| 日本美女一区二区| 欧美做爰猛烈大尺度电影无法无天| 国产三级精品三级在线专区| 日韩福利电影在线| 欧美在线免费播放| 亚洲日本电影在线| 成人免费视频免费观看| 精品国产乱码久久久久久1区2区| 婷婷开心久久网| 欧美影院午夜播放| 亚洲视频在线一区| 成人黄页毛片网站| 久久久天堂av| 国产一区二区精品久久| 日韩区在线观看| 亚洲123区在线观看| 欧美视频一区二区三区| 亚洲欧美一区二区三区久本道91| 成人av资源下载| 国产欧美一区二区精品性| 激情六月婷婷久久| 欧美精品一区二区久久久| 日韩va欧美va亚洲va久久| 欧美日韩国产123区| 依依成人精品视频| 色中色一区二区| 亚洲视频香蕉人妖| 97超碰欧美中文字幕| 中文字幕字幕中文在线中不卡视频| 成人动漫一区二区三区| 国产精品美女www爽爽爽| 国产69精品久久777的优势| 国产午夜一区二区三区| 国产精品99久久久| 欧美高清在线一区| 成人国产精品视频| 中文字幕一区av| a在线欧美一区| 亚洲激情在线播放| 欧美午夜理伦三级在线观看| 亚洲午夜一区二区| 精品视频999| 免费精品99久久国产综合精品| 欧美xxxxxxxx| 国产伦精品一区二区三区视频青涩| 精品99久久久久久| 国产成人精品三级| 综合久久久久久| 欧美日韩中文字幕一区二区| 日韩在线卡一卡二| 精品99999| 成人黄色网址在线观看| 一区二区免费看| 欧美一级二级在线观看| 国产精品一级二级三级| 国产精品乱码久久久久久| 一本高清dvd不卡在线观看| 亚洲国产日韩一级| 欧美变态口味重另类| 国产成人精品亚洲777人妖 | 天天av天天翘天天综合网色鬼国产| 91精选在线观看| 国产精品亚洲成人| 亚洲免费在线视频一区 二区| 欧美日韩五月天| 久久99精品久久只有精品| 欧美国产在线观看| 欧美日韩aaaaaa| 激情偷乱视频一区二区三区| 亚洲日本免费电影| 日韩美一区二区三区| 成人av网址在线观看| 亚洲午夜免费电影| 久久亚洲一级片| 欧美性猛片aaaaaaa做受| 韩国三级电影一区二区| 亚洲欧美偷拍卡通变态| 日韩欧美一二区| 99精品国产一区二区三区不卡| 午夜日韩在线观看| 国产精品色哟哟| 91精品视频网| 9久草视频在线视频精品| 日本怡春院一区二区| 中文幕一区二区三区久久蜜桃| 欧美男生操女生| 成人av电影在线观看| 免费一级片91| 一区二区三区四区国产精品| 日韩精品在线一区| 91久久精品一区二区| 国产黑丝在线一区二区三区| 亚洲成a天堂v人片| 国产精品视频一二三区| 日韩一区二区三区视频| 在线视频你懂得一区| 国产成人精品影院| 日产精品久久久久久久性色| 亚洲美女视频一区| 国产精品午夜久久| 精品捆绑美女sm三区| 欧美日韩一区中文字幕| 99免费精品在线观看| 国产在线一区二区综合免费视频| 亚洲香肠在线观看| 亚洲天堂免费在线观看视频| 精品国产乱码久久久久久免费 | 在线免费亚洲电影| 成人国产电影网| 国产一区二区在线影院| 性做久久久久久免费观看| 伊人开心综合网| 国产精品久久久久桃色tv| 久久伊人中文字幕| 日韩美一区二区三区| 欧美日韩免费电影| 在线一区二区观看| 91亚洲资源网| zzijzzij亚洲日本少妇熟睡| 国产aⅴ综合色| 国产一区二区精品久久91| 麻豆91在线看| 久久精品国产亚洲5555| 久久精品国产99国产| 日韩成人精品视频| 日本美女视频一区二区|