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

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

?? winsock.cxx

?? windows mobile phone source code
?? CXX
?? 第 1 頁 / 共 2 頁
字號:
}


//////////////////////////////////////////////////////////////////////////////
// PIPSocket

PIPSocket::Address::Address(BYTE b1, BYTE b2, BYTE b3, BYTE b4)
{
  S_un.S_un_b.s_b1 = b1;
  S_un.S_un_b.s_b2 = b2;
  S_un.S_un_b.s_b3 = b3;
  S_un.S_un_b.s_b4 = b4;
}


PIPSocket::Address::Address(DWORD dw)
{
  S_un.S_addr = dw;
}


PIPSocket::Address & PIPSocket::Address::operator=(DWORD dw)
{
  S_un.S_addr = dw;
  return *this;
}


PIPSocket::Address::operator DWORD() const
{
  return S_un.S_addr;
}


BYTE PIPSocket::Address::Byte1() const
{
  return S_un.S_un_b.s_b1;
}


BYTE PIPSocket::Address::Byte2() const
{
  return S_un.S_un_b.s_b2;
}


BYTE PIPSocket::Address::Byte3() const
{
  return S_un.S_un_b.s_b3;
}


BYTE PIPSocket::Address::Byte4() const
{
  return S_un.S_un_b.s_b4;
}


BOOL P_IsOldWin95()
{
  static int state = -1;
  if (state < 0) {
    state = 1;
    OSVERSIONINFO info;
    info.dwOSVersionInfoSize = sizeof(info);
    if (GetVersionEx(&info)) {
      state = 0;
      if (info.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS && info.dwBuildNumber < 1000)
        state = 1;
    }
  }
  return state != 0;
}


BOOL PIPSocket::IsLocalHost(const PString & hostname)
{
  if (hostname.IsEmpty())
    return TRUE;

  if (hostname *= "localhost")
    return TRUE;

  // lookup the host address using inet_addr, assuming it is a "." address
  Address addr = hostname;
  if (addr == 16777343)  // Is 127.0.0.1
    return TRUE;

  if (addr == 0) {
    if (!GetHostAddress(hostname, addr))
      return FALSE;
  }

  struct hostent * host_info = ::gethostbyname(GetHostName());

  if (P_IsOldWin95())
    return addr == Address(*(struct in_addr *)host_info->h_addr_list[0]);

  for (PINDEX i = 0; host_info->h_addr_list[i] != NULL; i++) {
    if (addr == Address(*(struct in_addr *)host_info->h_addr_list[i]))
      return TRUE;
  }

  return FALSE;
}

#ifndef _WIN32_WCE
//////////////////////////////////////////////////////////////////////////////
// PIPXSocket

PIPXSocket::Address::Address()
{
  memset(this, 0, sizeof(*this));
}


PIPXSocket::Address::Address(const Address & addr)
{
  memcpy(this, &addr, sizeof(*this));
}


PIPXSocket::Address::Address(const PString & str)
{
  PINDEX colon = str.Find(':');
  if (colon == P_MAX_INDEX)
    colon = 0;
  else {
    DWORD netnum = 0;
    for (PINDEX i = 0; i < colon; i++) {
      int c = str[i];
      if (isdigit(c))
        netnum = (netnum << 4) + c - '0';
      else if (isxdigit(c))
        netnum = (netnum << 4) + toupper(c) - 'A' + 10;
      else {
        memset(this, 0, sizeof(*this));
        return;
      }
    }
    network.dw = ntohl(netnum);
  }

  memset(node, 0, sizeof(node));

  int shift = 0;
  PINDEX byte = 5;
  PINDEX pos = str.GetLength();
  while (--pos > colon) {
    int c = str[pos];
    if (c != '-') {
      if (isdigit(c))
        node[byte] |= (c - '0') << shift;
      else if (isxdigit(c))
        node[byte] |= (toupper(c) - 'A' + 10) << shift;
      else {
        memset(this, 0, sizeof(*this));
        return;
      }
      if (shift == 0)
        shift = 4;
      else {
        shift = 0;
        byte--;
      }
    }
  }
}


PIPXSocket::Address::Address(DWORD netNum, const char * nodeNum)
{
  network.dw = netNum;
  memcpy(node, nodeNum, sizeof(node));
}


PIPXSocket::Address & PIPXSocket::Address::operator=(const Address & addr)
{
  memcpy(this, &addr, sizeof(*this));
  return *this;
}


PIPXSocket::Address::operator PString() const
{
  return psprintf("%02X%02X%02X%02X:%02X%02X%02X%02X%02X%02X",
                  network.b.b1, network.b.b2, network.b.b3, network.b.b4,
                  node[0], node[1], node[2], node[3], node[4], node[5]);
}


BOOL PIPXSocket::Address::IsValid() const
{
  static Address empty;
  return memcmp(this, &empty, sizeof(empty)) != 0;
}


PIPXSocket::PIPXSocket(WORD newPort)
{
  SetPort(newPort);
}


PString PIPXSocket::GetName() const
{
  Address addr;
  if (((PIPXSocket*)this)->GetPeerAddress(addr))
    return addr;
  else
    return PString();
}


BOOL PIPXSocket::OpenSocket()
{
  return ConvertOSError(os_handle = os_socket(AF_IPX, SOCK_DGRAM, NSPROTO_IPX));
}


const char * PIPXSocket::GetProtocolName() const
{
  return "ipx";
}


BOOL PIPXSocket::SetPacketType(int type)
{
  return ConvertOSError(::setsockopt(os_handle,
                           NSPROTO_IPX, IPX_PTYPE, (char *)&type, sizeof(type)));
}


int PIPXSocket::GetPacketType()
{
  int value;
  int valSize = sizeof(value);
  if (ConvertOSError(::getsockopt(os_handle,
                                NSPROTO_IPX, IPX_PTYPE, (char *)&value, &valSize)))
    return value;
  return -1;
}


PString PIPXSocket::GetHostName(const Address & addr)
{
  return addr;
}


BOOL PIPXSocket::GetHostAddress(Address &)
{
  return FALSE;
}


static void AssignAddress(sockaddr_ipx & sip, const PIPXSocket::Address & addr)
{
  memcpy(sip.sa_netnum, &addr.network, sizeof(sip.sa_netnum));
  memcpy(sip.sa_nodenum, addr.node, sizeof(sip.sa_nodenum));
}


static void AssignAddress(PIPXSocket::Address & addr, const sockaddr_ipx & sip)
{
  memcpy(&addr.network, sip.sa_netnum, sizeof(addr.network));
  memcpy(addr.node, sip.sa_nodenum, sizeof(addr.node));
}


BOOL PIPXSocket::GetHostAddress(const PString & hostname, Address & addr)
{
  addr = hostname;
  if (addr.IsValid())
    return TRUE;

  static GUID netware_file_server = SVCID_FILE_SERVER;
  CSADDR_INFO addr_info[10];
  DWORD buffer_length = sizeof(addr_info);
	int num = GetAddressByName(NS_DEFAULT,
                             &netware_file_server,
                             (LPTSTR)(const char *)hostname,
                             NULL,
                             0,
                             NULL,
                             addr_info,
                             &buffer_length,
                             NULL,
                             NULL
                            );
  if (num <= 0)
    return FALSE;

  AssignAddress(addr, *(sockaddr_ipx *)addr_info[0].RemoteAddr.lpSockaddr);
  return TRUE;
}


BOOL PIPXSocket::GetLocalAddress(Address & addr)
{
  sockaddr_ipx sip;
  int size = sizeof(sip);
  if (!ConvertOSError(::getsockname(os_handle, (struct sockaddr *)&sip, &size)))
    return FALSE;

  AssignAddress(addr, sip);
  return TRUE;
}


BOOL PIPXSocket::GetLocalAddress(Address & addr, WORD & portNum)
{
  sockaddr_ipx sip;
  int size = sizeof(sip);
  if (!ConvertOSError(::getsockname(os_handle, (struct sockaddr *)&sip, &size)))
    return FALSE;

  AssignAddress(addr, sip);
  portNum = Net2Host(sip.sa_socket);
  return TRUE;
}


BOOL PIPXSocket::GetPeerAddress(Address & addr)
{
  sockaddr_ipx sip;
  int size = sizeof(sip);
  if (!ConvertOSError(::getpeername(os_handle, (struct sockaddr *)&sip, &size)))
    return FALSE;

  AssignAddress(addr, sip);
  return TRUE;
}


BOOL PIPXSocket::GetPeerAddress(Address & addr, WORD & portNum)
{
  sockaddr_ipx sip;
  int size = sizeof(sip);
  if (!ConvertOSError(::getpeername(os_handle, (struct sockaddr *)&sip, &size)))
    return FALSE;

  AssignAddress(addr, sip);
  portNum = Net2Host(sip.sa_socket);
  return TRUE;
}


BOOL PIPXSocket::Connect(const PString & host)
{
  Address addr;
  if (GetHostAddress(host, addr))
    return Connect(addr);
  return FALSE;
}


BOOL PIPXSocket::Connect(const Address & addr)
{
  // close the port if it is already open
  if (IsOpen())
    Close();

  // make sure we have a port
  PAssert(port != 0, "Cannot connect socket without setting port");

  // attempt to create a socket
  if (!OpenSocket())
    return FALSE;

  // attempt to lookup the host name
  sockaddr_ipx sip;
  memset(&sip, 0, sizeof(sip));
  sip.sa_family = AF_IPX;
  AssignAddress(sip, addr);
  sip.sa_socket  = Host2Net(port);  // set the port
  if (ConvertOSError(os_connect((struct sockaddr *)&sip, sizeof(sip))))
    return TRUE;

  os_close();
  return FALSE;
}


BOOL PIPXSocket::Listen(unsigned, WORD newPort, Reusability reuse)
{
  // make sure we have a port
  if (newPort != 0)
    port = newPort;

  // close the port if it is already open
  if (!IsOpen()) {
    // attempt to create a socket
    if (!OpenSocket())
      return FALSE;
  }

  // attempt to listen
  if (SetOption(SO_REUSEADDR, reuse == CanReuseAddress ? 1 : 0)) {
    // attempt to listen
    sockaddr_ipx sip;
    memset(&sip, 0, sizeof(sip));
    sip.sa_family = AF_IPX;
    sip.sa_socket = Host2Net(port);       // set the port

    if (ConvertOSError(::bind(os_handle, (struct sockaddr*)&sip, sizeof(sip)))) {
      int size = sizeof(sip);
      if (ConvertOSError(::getsockname(os_handle, (struct sockaddr*)&sip, &size))) {
        port = Net2Host(sip.sa_socket);
        return TRUE;
      }
    }
  }

  os_close();
  return FALSE;
}


BOOL PIPXSocket::ReadFrom(void * buf, PINDEX len, Address & addr, WORD & port)
{
  lastReadCount = 0;

  sockaddr_ipx sip;
  int addrLen = sizeof(sip);
  if (os_recvfrom(buf, len, 0, (struct sockaddr *)&sip, &addrLen)) {
    AssignAddress(addr, sip);
    port = Net2Host(sip.sa_socket);
  }

  return lastReadCount > 0;
}


BOOL PIPXSocket::WriteTo(const void * buf, PINDEX len, const Address & addr, WORD port)
{
  lastWriteCount = 0;

  sockaddr_ipx sip;
  sip.sa_family = AF_IPX;
  AssignAddress(sip, addr);
  sip.sa_socket = Host2Net(port);
  return os_sendto(buf, len, 0, (struct sockaddr *)&sip, sizeof(sip));
}


//////////////////////////////////////////////////////////////////////////////
// PSPXSocket

PSPXSocket::PSPXSocket(WORD port)
  : PIPXSocket(port)
{
}


BOOL PSPXSocket::OpenSocket()
{
  return ConvertOSError(os_handle = os_socket(AF_IPX, SOCK_STREAM, NSPROTO_SPX));
}


const char * PSPXSocket::GetProtocolName() const
{
  return "spx";
}


BOOL PSPXSocket::Listen(unsigned queueSize, WORD newPort, Reusability reuse)
{
  if (PIPXSocket::Listen(queueSize, newPort, reuse) &&
      ConvertOSError(::listen(os_handle, queueSize)))
    return TRUE;

  os_close();
  return FALSE;
}


BOOL PSPXSocket::Accept(PSocket & socket)
{
  PAssert(socket.IsDescendant(PIPXSocket::Class()), "Invalid listener socket");

  sockaddr_ipx sip;
  sip.sa_family = AF_IPX;
  int size = sizeof(sip);
  if (!ConvertOSError(os_handle = os_accept(socket, (struct sockaddr *)&sip, &size)))
    return FALSE;

  port = ((PIPXSocket &)socket).GetPort();
  return TRUE;
}

#endif
// End Of File ///////////////////////////////////////////////////////////////

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本大道久久a久久精品综合| 中文字幕av不卡| 国产午夜精品久久久久久久| 亚洲裸体在线观看| 国产综合久久久久影院| 欧美日韩日日夜夜| 欧美国产精品v| 久久99国产精品久久99 | 狠狠色丁香久久婷婷综| 欧美日韩一级二级| 亚洲日本乱码在线观看| 国内精品伊人久久久久av一坑| 欧美午夜视频网站| 中文字幕一区二区三区在线不卡| 国精产品一区一区三区mba视频| 色婷婷激情久久| 国产精品视频看| 韩国在线一区二区| 亚洲精品一区二区三区四区高清| 日韩精品成人一区二区三区| 欧日韩精品视频| 一区二区三区免费网站| 91日韩精品一区| 综合久久综合久久| proumb性欧美在线观看| 久久精品在这里| 国产精品一区二区三区网站| 亚洲精品一区二区三区香蕉 | 日韩欧美中文一区二区| 日日夜夜精品视频天天综合网| 欧美卡1卡2卡| 一区二区三区精品| 欧美亚洲综合在线| 亚洲成人资源在线| 91精品国模一区二区三区| 亚洲一区二区三区四区五区中文| 91搞黄在线观看| 午夜激情一区二区三区| 欧美一级国产精品| 国内精品伊人久久久久av影院 | 韩国一区二区在线观看| 精品国产123| 成人少妇影院yyyy| 亚洲欧洲成人自拍| 一本色道a无线码一区v| 午夜精品福利一区二区三区av | 中文字幕一区视频| 欧美亚洲一区二区在线| 亚洲高清视频在线| 91精品欧美综合在线观看最新| 久热成人在线视频| 国产亚洲精品福利| 99久久精品免费看国产免费软件| 亚洲精品乱码久久久久久久久| 色94色欧美sute亚洲线路二 | 一区二区三区在线视频观看58| 欧美性三三影院| 国产一区二区在线观看视频| 国产精品狼人久久影院观看方式| 91激情在线视频| 蜜臀久久99精品久久久画质超高清| 精品捆绑美女sm三区| 成人av在线看| 日韩黄色免费网站| 国产精品每日更新| 欧美日本免费一区二区三区| 国产精品一区二区三区四区| 一区二区三区不卡在线观看| 欧美r级在线观看| www.欧美.com| 日本va欧美va精品发布| 国产精品久久久爽爽爽麻豆色哟哟 | 色综合色狠狠天天综合色| 麻豆成人综合网| 亚洲精选视频免费看| 久久久久久久久久久99999| 欧洲生活片亚洲生活在线观看| 激情综合网av| 亚洲h动漫在线| 中文字幕中文字幕在线一区 | 高清成人免费视频| 日本在线播放一区二区三区| 中文字幕高清不卡| 日韩欧美色电影| 欧美伊人精品成人久久综合97| 国产精品白丝jk黑袜喷水| 天使萌一区二区三区免费观看| 国产精品不卡一区二区三区| 欧美精品一区二区三区一线天视频| 欧美怡红院视频| 99久久久久免费精品国产| 国产精品一区久久久久| 老司机精品视频在线| 亚洲电影中文字幕在线观看| 国产精品免费久久| 国产亚洲成av人在线观看导航 | 欧美日韩一区二区欧美激情| 99麻豆久久久国产精品免费| 国产精品一级片| 韩国女主播一区二区三区| 日韩电影免费一区| 亚洲综合成人在线| 亚洲综合无码一区二区| √…a在线天堂一区| 国产精品午夜久久| 亚洲国产高清不卡| 国产亚洲一二三区| 日本一区二区三区电影| 国产欧美日韩另类一区| 国产日韩亚洲欧美综合| 国产欧美日韩精品a在线观看| 精品免费国产一区二区三区四区| 欧美一区二区三区在线观看 | 精品一区二区三区免费播放| 蜜臀av一区二区三区| 免费看日韩精品| 六月丁香婷婷久久| 韩日精品视频一区| 国产乱理伦片在线观看夜一区| 国内精品视频666| 国产乱子伦一区二区三区国色天香| 麻豆国产精品777777在线| 韩国成人在线视频| 国产成人精品综合在线观看| 成人av在线资源| 欧美亚洲国产一卡| 3atv在线一区二区三区| 欧美mv和日韩mv国产网站| 久久婷婷国产综合精品青草| 国产女主播视频一区二区| 国产精品天干天干在观线| 亚洲欧美激情插| 午夜欧美电影在线观看| 美女久久久精品| 国产**成人网毛片九色 | 成人深夜在线观看| 欧洲另类一二三四区| 欧美成人免费网站| 国产精品国模大尺度视频| 亚洲福利电影网| 韩国一区二区在线观看| 色综合久久中文字幕综合网| 欧美日韩一级视频| 久久久久久久久久久久久夜| 亚洲免费电影在线| 欧美aa在线视频| 91丝袜呻吟高潮美腿白嫩在线观看| 欧美亚洲愉拍一区二区| 精品国产乱码久久| 亚洲一区二区视频在线观看| 毛片基地黄久久久久久天堂| av在线综合网| 日韩视频在线你懂得| **欧美大码日韩| 久久er精品视频| 91丝袜高跟美女视频| 欧美成人猛片aaaaaaa| 亚洲精品国产一区二区精华液| 六月丁香综合在线视频| 色av综合在线| 国产精品素人视频| 日本不卡视频在线观看| 色婷婷av一区二区三区大白胸| 精品va天堂亚洲国产| 亚洲成人动漫精品| 成人app软件下载大全免费| 日韩欧美资源站| 亚洲成人av中文| 色综合天天综合网国产成人综合天 | 国产精品18久久久久久久久 | 国产精品热久久久久夜色精品三区 | 天天综合天天综合色| av不卡一区二区三区| 精品国内二区三区| 午夜欧美大尺度福利影院在线看| 91免费在线看| 国产精品美女一区二区| 国内精品自线一区二区三区视频| 欧美久久久一区| 一级特黄大欧美久久久| 91尤物视频在线观看| 国产精品美女久久久久久2018 | 欧美a级理论片| 欧美精品丝袜中出| 亚洲va国产天堂va久久en| 色一区在线观看| 亚洲欧美色一区| 成人激情免费网站| 精品国产伦一区二区三区观看方式| 日本一区二区三区国色天香| 91超碰这里只有精品国产| 中文字幕巨乱亚洲| 欧美精品在线一区二区三区| 一区二区免费视频| 91精品国产乱| 丁香婷婷综合激情五月色| 亚洲激情图片qvod| 日韩午夜在线影院| 99精品欧美一区二区蜜桃免费 | 一区二区三区国产精华|