当前位置: 首页 > news >正文

广州最好的网站设计广州陈村网站建设

广州最好的网站设计,广州陈村网站建设,织梦dedecms教育培训网站模板,网站多少页面合适InetAddress InetAddress 类是 muduo 网络库中的一个重要类#xff0c;用于表示网络中的 IP 地址和端口号。 InetAddress 类在 muduo 网络库中被广泛使用#xff0c;用于表示网络中的通信实体的地址信息#xff0c;例如服务器地址、客户端地址等。通过 InetAddress 类用于表示网络中的 IP 地址和端口号。 InetAddress 类在 muduo 网络库中被广泛使用用于表示网络中的通信实体的地址信息例如服务器地址、客户端地址等。通过 InetAddress 类我们可以方便地操作 IP 地址和端口号实现网络通信的功能。 源码比较简单,已经编写详细注释 源码剖析 InetAddress.h // Copyright 2010, Shuo Chen. All rights reserved. // http://code.google.com/p/muduo/ // // Use of this source code is governed by a BSD-style license // that can be found in the License file.// Author: Shuo Chen (chenshuo at chenshuo dot com) // // This is a public header file, it must only include public header files.#ifndef MUDUO_NET_INETADDRESS_H #define MUDUO_NET_INETADDRESS_H#include muduo/base/copyable.h #include muduo/base/StringPiece.h#include netinet/in.hnamespace muduo { namespace net { namespace sockets { const struct sockaddr* sockaddr_cast(const struct sockaddr_in6* addr); }/// /// Wrapper of sockaddr_in. /// /// This is an POD interface class. class InetAddress : public muduo::copyable {public:/// Constructs an endpoint with given port number./// Mostly used in TcpServer listening.explicit InetAddress(uint16_t port 0, bool loopbackOnly false, bool ipv6 false);/// Constructs an endpoint with given ip and port./// c ip should be 1.2.3.4InetAddress(StringArg ip, uint16_t port, bool ipv6 false);/// Constructs an endpoint with given struct c sockaddr_in/// Mostly used when accepting new connectionsexplicit InetAddress(const struct sockaddr_in addr): addr_(addr){ }explicit InetAddress(const struct sockaddr_in6 addr): addr6_(addr){ }//返回addr_地址成员变量的协议族sa_family_t family() const { return addr_.sin_family; }//获取ip地址的点十分进制的字符串string toIp() const;//获取ip地址和port端口的点十分进制的字符串string toIpPort() const;//获取端口号(本机字节序)uint16_t port() const;// default copy/assignment are Okay//返回sockaddr结构体指针const struct sockaddr* getSockAddr() const { return sockets::sockaddr_cast(addr6_); }//设置SockAddrvoid setSockAddrInet6(const struct sockaddr_in6 addr6) { addr6_ addr6; }//获取ip地址(网络字节序)uint32_t ipv4NetEndian() const;//获取端口号(网络字节序)uint16_t portNetEndian() const { return addr_.sin_port; }// resolve hostname to IP address, not changing port or sin_family// return true on success.// thread safe//通过主机名解析出ip地址static bool resolve(StringArg hostname, InetAddress* result);// static std::vectorInetAddress resolveAll(const char* hostname, uint16_t port 0);// set IPv6 ScopeID//设置ipv6地址的作用域范围。void setScopeId(uint32_t scope_id);private:union{//ipv4struct sockaddr_in addr_;//ipv6struct sockaddr_in6 addr6_;}; };} // namespace net } // namespace muduo#endif // MUDUO_NET_INETADDRESS_H InetAddress.cc // Copyright 2010, Shuo Chen. All rights reserved. // http://code.google.com/p/muduo/ // // Use of this source code is governed by a BSD-style license // that can be found in the License file.// Author: Shuo Chen (chenshuo at chenshuo dot com)#include muduo/net/InetAddress.h#include muduo/base/Logging.h #include muduo/net/Endian.h #include muduo/net/SocketsOps.h#include netdb.h #include netinet/in.h// INADDR_ANY use (type)value casting. #pragma GCC diagnostic ignored -Wold-style-cast static const in_addr_t kInaddrAny INADDR_ANY; static const in_addr_t kInaddrLoopback INADDR_LOOPBACK; #pragma GCC diagnostic error -Wold-style-cast// /* Structure describing an Internet socket address. */ // struct sockaddr_in { // sa_family_t sin_family; /* address family: AF_INET */ // uint16_t sin_port; /* port in network byte order */ // struct in_addr sin_addr; /* internet address */ // };// /* Internet address. */ // typedef uint32_t in_addr_t; // struct in_addr { // in_addr_t s_addr; /* address in network byte order */ // };// struct sockaddr_in6 { // sa_family_t sin6_family; /* address family: AF_INET6 */ // uint16_t sin6_port; /* port in network byte order */ // uint32_t sin6_flowinfo; /* IPv6 flow information */ // struct in6_addr sin6_addr; /* IPv6 address */ // uint32_t sin6_scope_id; /* IPv6 scope-id */ // };using namespace muduo; using namespace muduo::net;static_assert(sizeof(InetAddress) sizeof(struct sockaddr_in6),InetAddress is same size as sockaddr_in6); static_assert(offsetof(sockaddr_in, sin_family) 0, sin_family offset 0); static_assert(offsetof(sockaddr_in6, sin6_family) 0, sin6_family offset 0); static_assert(offsetof(sockaddr_in, sin_port) 2, sin_port offset 2); static_assert(offsetof(sockaddr_in6, sin6_port) 2, sin6_port offset 2);InetAddress::InetAddress(uint16_t portArg, bool loopbackOnly, bool ipv6) {static_assert(offsetof(InetAddress, addr6_) 0, addr6_ offset 0);static_assert(offsetof(InetAddress, addr_) 0, addr_ offset 0);if (ipv6){memZero(addr6_, sizeof addr6_);addr6_.sin6_family AF_INET6;in6_addr ip loopbackOnly ? in6addr_loopback : in6addr_any;addr6_.sin6_addr ip;addr6_.sin6_port sockets::hostToNetwork16(portArg);}else{memZero(addr_, sizeof addr_);addr_.sin_family AF_INET;in_addr_t ip loopbackOnly ? kInaddrLoopback : kInaddrAny;addr_.sin_addr.s_addr sockets::hostToNetwork32(ip);addr_.sin_port sockets::hostToNetwork16(portArg);} }InetAddress::InetAddress(StringArg ip, uint16_t portArg, bool ipv6) {if (ipv6 || strchr(ip.c_str(), :)){memZero(addr6_, sizeof addr6_);sockets::fromIpPort(ip.c_str(), portArg, addr6_);}else{memZero(addr_, sizeof addr_);sockets::fromIpPort(ip.c_str(), portArg, addr_);} }string InetAddress::toIpPort() const {char buf[64] ;sockets::toIpPort(buf, sizeof buf, getSockAddr());return buf; }string InetAddress::toIp() const {char buf[64] ;sockets::toIp(buf, sizeof buf, getSockAddr());return buf; }uint32_t InetAddress::ipv4NetEndian() const {assert(family() AF_INET);return addr_.sin_addr.s_addr; }uint16_t InetAddress::port() const {return sockets::networkToHost16(portNetEndian()); }static __thread char t_resolveBuffer[64 * 1024];bool InetAddress::resolve(StringArg hostname, InetAddress* out) {assert(out ! NULL);struct hostent hent;struct hostent* he NULL;int herrno 0;memZero(hent, sizeof(hent));//通过主机名解析出ip地址int ret gethostbyname_r(hostname.c_str(), hent, t_resolveBuffer, sizeof t_resolveBuffer, he, herrno);if (ret 0 he ! NULL){assert(he-h_addrtype AF_INET he-h_length sizeof(uint32_t));out-addr_.sin_addr *reinterpret_caststruct in_addr*(he-h_addr);return true;}else{if (ret){LOG_SYSERR InetAddress::resolve;}return false;} }void InetAddress::setScopeId(uint32_t scope_id) {if (family() AF_INET6){addr6_.sin6_scope_id scope_id;} }
http://www.pierceye.com/news/494782/

相关文章:

  • 设计 企业网站罗湖网站-建设深圳信科
  • 太原自助模板建站手机版电脑qq登录入口
  • 公司网站建设哪家比较好app 网站
  • 建设银行个人网站打不开个人主页模板下载
  • 山西建设公司网站wordpress视频适应手机端
  • 原型样网站做一般的公司门户网站投资额
  • 南宁百度网站公司电话网站配置优化
  • 德州网站建设的公司免费注册公司怎么注册
  • 成都开发网站建设中国建设规划采购网站
  • 企业网站建设应避免数据孤岛深圳东莞网站建设
  • pk10网站怎么做郑州seo费用
  • 菏泽市建设局网站电话网站建设服务咨询
  • 购物网站模版广州外贸网络推广
  • 高碑店网站网站建设手机软件开发的模式
  • 公司网站开发国内外现状网络营销外包团队哪些好
  • 淘客网站怎么建立如何用api做网站
  • 合肥网站建设ahyedawordpress主题安全
  • 网站建设实训室介绍东莞seo广告宣传
  • 公职人员可以做公益网站吗aws网站建设
  • 什么叫高端网站定制广州建筑公司
  • 全新网站如何做百度竞价网站制作现状解决方案
  • 阿里云esc建设网站近三天时政热点
  • 怎样做公司网站介绍仿站网站源码下载
  • 电子商务网站规划与建设摘要软件app定制开发
  • 天水做网站的公司kj6699的seo综合查询
  • 找工程项目信息网站早那么做商城网站
  • 做网站优化销售管理系统排名
  • wordpress导入网站模板wordpress部分图片
  • 无锡做网站365caiyi秘密直播
  • 无锡企业网站制作报价公司做网站需要哪些手续