sockets namespace源码阅读(muduo::net::SocketsOps)

sockets namespace源码阅读(muduo::net::SocketsOps.h)

如果有问题,欢迎交流指正!!!

对套接字基本api比如connectbindlisten等的封装。还有一些负责类型转换的函数。

  • sockaddr* sockaddr_cast

一系列的重载函数,负责将输入的或是sockaddr_in,或是sockaddr_in6类型的地址调用隐式类型转换转换为sockaddr

  • sockaddr_in* sockaddr_in_cast

负责将sockaddr类型的地址转换为sockaddr_in

  • sockaddr_in6* sockaddr_in6_cast

负责将sockaddr类型的地址装换为sockaddr_in6

  • int createNonblockingOrDir(sa_family_t family)

根据输入的协议族参数,创建相应的流套接字,并设为非阻塞的和不允许exec()创建的新进程使用的(setNonBlockAndCloseOnExec)
注:这里的OrDie是说如果套接字创建失败,就要结束运行。

  • void setNonBlockingAndCloseOnExec(int sockfd)

调用fcntlsockfd所指套接字为非阻塞的(O_NONBLOCK)和不允许exec()创建的新进程(FD_CLOEXEC)使用的。

  • void bindOrDie(int sockfd,const struct sockaddr* addr)

::bind操作的封装,没有额外的内容

  • listenOrDie(int sockfd)

::listen操作的封装,队列长度为SOMAXCONNSOMAXCONN长度是多少?

  • int accept(int sockfd,struct sockaddr_in6* addr)

::accept的封装,返回 listening socket:sockfd上侦听到的新连接,并将其地址保存到addr
addr虽然是ipv6格式的,但::accept并不会检查格式,只会检查该空间是否足够放下数据。
另外,和之前的listenOrDiebindOrDie相比,本函数如果获得的套接字无效,报错之后依旧会返回,以便Acceptor Class处理EMFILE的错误,而后者会直接结束程序运行。

  • int connect(int sockfd,const struct sockaddr* addr)

::connect的封装,没有别的内容

  • ssize_t read(int sockfd,void* buf,size_t count)

::read的封装,读count大小的数据到buf中,返回实际读到的长度

  • ssize_t readv(int sockfd,const struct *iov,int inovnt)

::readv的封装。
关于ssize_t readv(int fd,const struct *iov,int inovnt)
散布读,从fd中读取inovnt块内存数据到iov数组中。返回读取的数据长度。不知道具体怎么用

  • ssize_t write(int sockfd,const void* buf,size_t count)

write的封装,从bufcount大小的数据到sockfd中,返回成功写入的数据长度。

  • void close(int sockfd)

关闭字符串

  • void shutdownWrite(int sockfd)

调用shutdown关闭sockfd的写功能

  • void toIp(char* buf,size_t size,const struct sockaddr* addr)

addr的网址转为本地格式并输入给buf,size至少为buf中的可用字符串长度,并大于对应的网址长度。

  • void toIpPort(char* buf,size_t size,const struct sockaddr* addr)

addr的网址和端口转为可读格式

  • void sockets::fromIpPort(const char* ip,unint16_t port,struct sockaddr_in* addr) void sockets::fromIpPort(const char* ip,unint16_t port,struct sockaddr_in6* addr)

用本地顺序的ipportaddr赋值。

  • int getSocketError(int sockfd)

调用getsockopt获取待处理的错误

  • struct sockaddr_in6 getLocalAddr(int sockfd)

调用getsockname获取与sockfd绑定的本地地址

  • struct sockaddr_in6 getPeerAddr(int sockfd)

调用getpeername获取与sockfd绑定的远端地址

  • isSelfConnect(int sockfd)

比较本地地址的端口网址和远端地址的端口网址是否一样
这是要干嘛?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值