fastdo  0.6.16
eiennet::Socket类 参考

套接字基础类 更多...

#include <eiennet_socket.hpp>

类 eiennet::Socket 继承关系图:
eiennet::Socket 的协作图:

Public 类型

enum  AddrFamily {
  afUnspec = 0, afLocal = 1, afUnix = afLocal, afFile = afLocal,
  afInet = 2, afAx25 = 3, afIpx = 4, afAppletalk = 5,
  afNetrom = 6, afBridge = 7, afAtmpvc = 8, afX25 = 9,
  afInet6 = 10, afRose = 11, afDecnet = 12, afNetbeui = 13,
  afSecurity = 14, afKey = 15, afNetlink = 16, afRoute = afNetlink,
  afPacket = 17, afAsh = 18, afEconet = 19, afAtmsvc = 20,
  afRds = 21, afSna = 22, afIrda = 23, afPppox = 24,
  afWanpipe = 25, afLlc = 26, afUnknown27 = 27, afUnknown28 = 28,
  afCan = 29, afTipc = 30, afBluetooth = 31, afIucv = 32,
  afRxrpc = 33, afIsdn = 34, afPhonet = 35, afIeee802154 = 36,
  afMax = 37
}
 地址族 更多...
 
enum  SockType {
  sockUnknown, sockStream, sockDatagram, sockRaw,
  sockRdm, sockSeqPacket, sockDccp, sockPacket,
  sockCloexec, sockNonblock
}
 套接字类型 更多...
 
enum  Protocol {
  protoUnspec = 0, protoIp = 0, protoIcmp, protoIgmp,
  protoIpip, protoIpv4 = protoIpip, protoTcp, protoEgp,
  protoPup, protoUdp, protoIdp, protoTp,
  protoDccp, protoIpv6, protoRsvp, protoGre,
  protoEsp, protoAh, protoMtp, protoBeetph,
  protoEncap, protoPim, protoComp, protoSctp,
  protoUdplite, protoRaw, protoMax
}
 协议 更多...
 
typedef std::function< void(size_t hadBytes, void *param) > FunctionSuccessCallback
 

Public 成员函数

 Socket (int sock=-1, bool isNewSock=false)
 构造函数1,包装现有socket描述符 更多...
 
 Socket (AddrFamily af, SockType sockType, Protocol proto)
 构造函数2,指定socket的'地址簇','类型','协议' 更多...
 
virtual ~Socket ()
 移动构造函数 更多...
 
AddrFamily getAddrFamily () const
 获取Socket的create()参数:'地址簇' 更多...
 
void setAddrFamily (AddrFamily af)
 指定Socket的create()参数:'地址簇' 更多...
 
SockType getSockType () const
 获取Socket的create()参数:'类型' 更多...
 
void setSockType (SockType sockType)
 指定Socket的create()参数:'类型' 更多...
 
Protocol getProtocol () const
 获取Socket的create()参数:'协议' 更多...
 
void setProtocol (Protocol proto)
 指定Socket的create()参数:'协议' 更多...
 
void getParams (AddrFamily *af, SockType *sockType, Protocol *proto)
 获取Socket的create()参数:'地址簇','类型','协议' 更多...
 
void setParams (AddrFamily af, SockType sockType, Protocol proto)
 指定Socket的create()参数:'地址簇','类型','协议' 更多...
 
bool create (AddrFamily af, SockType sockType, Protocol proto)
 根据'地址簇','类型','协议'创建一个socket 更多...
 
bool create ()
 根据内部存储的'地址簇','类型','协议'创建一个socket 更多...
 
int close ()
 关闭socket描述符 更多...
 
int shutdown (int how=SdSend)
 关掉socket的相应操作,但并不会close套接字。 更多...
 
int send (void const *data, size_t size, int msgFlags=MsgDefault)
 发送数据。返回已发送大小,出错返回-1。 更多...
 
int send (winux::AnsiString const &data, int msgFlags=MsgDefault)
 发送数据。返回已发送大小,出错返回-1。 更多...
 
int send (winux::Buffer const &data, int msgFlags=MsgDefault)
 发送数据。返回已发送大小,出错返回-1。 更多...
 
bool sendUntil (size_t targetSize, void const *data, int msgFlags=MsgDefault)
 发送数据,直到发送完指定大小的数据。 更多...
 
bool sendUntil (winux::AnsiString const &data, int msgFlags=MsgDefault)
 发送字符串,直到发送完该长度的字符串。 更多...
 
bool sendUntil (winux::Buffer const &data, int msgFlags=MsgDefault)
 发送缓冲区,直到发送完该大小的缓冲区。 更多...
 
int sendWaitUntil (size_t targetSize, void const *data, size_t *hadSent, double sec, int *rcWait, FunctionSuccessCallback eachSuccessCallback=FunctionSuccessCallback(), void *param=nullptr, int msgFlags=MsgDefault)
 发送数据,直到发送完指定大小的数据或超时。 更多...
 
int sendWaitUntil (winux::AnsiString const &data, size_t *hadSent, double sec, int *rcWait, FunctionSuccessCallback eachSuccessCallback=FunctionSuccessCallback(), void *param=nullptr, int msgFlags=MsgDefault)
 
int sendWaitUntil (winux::Buffer const &data, size_t *hadSent, double sec, int *rcWait, FunctionSuccessCallback eachSuccessCallback=FunctionSuccessCallback(), void *param=nullptr, int msgFlags=MsgDefault)
 
template<typename _PodType >
bool sendUntilType (_PodType const &v, size_t size=sizeof(_PodType), int msgFlags=MsgDefault)
 发送一个Plain of Data类型的变量,若成功返回true,否则返回false。 更多...
 
int recv (void *buf, size_t size, int msgFlags=MsgDefault)
 尝试接收size大小数据。返回实际接收的数据大小,出错返回-1。 更多...
 
winux::Buffer recv (size_t size, int msgFlags=MsgDefault)
 尝试接收size大小数据,返回实际收到的数据Buffer。 更多...
 
bool recvUntilTarget (winux::AnsiString const &target, winux::GrowBuffer *data, winux::GrowBuffer *extraData, int msgFlags=MsgDefault)
 接收数据,直到碰到target指定的数据。data返回接收到的数据,data里可以已有部分数据,extraData返回额外接收的数据。 更多...
 
int recvWaitUntilTarget (winux::AnsiString const &target, winux::GrowBuffer *data, winux::GrowBuffer *extraData, size_t *hadRead, size_t *startpos, size_t *pos, double sec, int *rcWait, FunctionSuccessCallback eachSuccessCallback=FunctionSuccessCallback(), void *param=nullptr, int msgFlags=MsgDefault)
 接收数据,直到碰到target指定的数据或者超时。 更多...
 
bool recvUntilSize (size_t targetSize, winux::GrowBuffer *data, int msgFlags=MsgDefault)
 接收数据,直到收到指定大小的数据。data返回接收到的数据。 更多...
 
int recvWaitUntilSize (size_t targetSize, winux::GrowBuffer *data, size_t *hadRead, double sec, int *rcWait, FunctionSuccessCallback eachSuccessCallback=FunctionSuccessCallback(), void *param=nullptr, int msgFlags=MsgDefault)
 接收数据,直到收到指定大小的数据或者超时。 更多...
 
template<typename _PodType >
bool recvUntilType (_PodType *v, size_t size=sizeof(_PodType), int msgFlags=MsgDefault)
 接收一个Plain of Data类型的变量,若成功返回true,否则返回false。 更多...
 
winux::Buffer recvAvail (int msgFlags=MsgDefault)
 接收不用阻塞即可接收的数据,返回收到的数据Buffer。 更多...
 
winux::Buffer recvWaitAvail (double sec, int *rcWait, int msgFlags=MsgDefault)
 接收已到达的数据,如果没有到达数据则等待有数据到达或超过指定时间,返回收到的数据Buffer。 更多...
 
int sendTo (EndPoint const &ep, void const *data, size_t size, int msgFlags=MsgDefault)
 无连接模式发送数据到指定端点。返回已发送大小,出错返回-1。 更多...
 
int sendTo (EndPoint const &ep, winux::AnsiString const &data, int msgFlags=MsgDefault)
 无连接模式发送数据到指定端点。返回已发送大小,出错返回-1。 更多...
 
int sendTo (EndPoint const &ep, winux::Buffer const &data, int msgFlags=MsgDefault)
 无连接模式发送数据到指定端点。返回已发送大小,出错返回-1。 更多...
 
int recvFrom (EndPoint *ep, void *buf, size_t size, int msgFlags=MsgDefault)
 无连接模式接收数据。返回已接收的大小,出错返回-1。 更多...
 
winux::Buffer recvFrom (EndPoint *ep, size_t size, int msgFlags=MsgDefault)
 无连接模式接收数据。返回实际收到的数据Buffer。 更多...
 
bool connect (EndPoint const &ep)
 连接服务器 更多...
 
bool bind (EndPoint const &ep)
 绑定地址。若套接字尚未创建则创建套接字 更多...
 
bool listen (int backlog)
 监听 更多...
 
bool accept (int *sock, EndPoint *ep=NULL)
 接受一个客户连接 更多...
 
winux::SharedPointer< Socketaccept (EndPoint *ep=NULL)
 接受一个客户连接 更多...
 
int getRecvBufSize () const
 获取接收缓冲区大小 更多...
 
bool setRecvBufSize (int optval)
 设置接收缓冲区大小 更多...
 
int getSendBufSize () const
 获取发送缓冲区大小 更多...
 
bool setSendBufSize (int optval)
 设置发送缓冲区大小 更多...
 
winux::uint32 getRecvTimeout () const
 获取接收超时(ms) 更多...
 
bool setRecvTimeout (winux::uint32 optval)
 设置接收超时(ms) 更多...
 
winux::uint32 getSendTimeout () const
 获取发送超时(ms) 更多...
 
bool setSendTimeout (winux::uint32 optval)
 设置发送超时(ms) 更多...
 
bool getReUseAddr () const
 获取是否开启了重用地址 更多...
 
bool setReUseAddr (bool optval)
 设置socket是否重用地址,默认false不重用 更多...
 
bool getBroadcast () const
 获取是否启用广播 更多...
 
bool setBroadcast (bool optval)
 设置socket是否广播,默认false非广播 更多...
 
bool getIpv6Only () const
 获取IPV6套接字是否只启用IPV6功能,Windows默认true,Linux默认false 更多...
 
bool setIpv6Only (bool optval)
 设置IPV6套接字是否只启用IPV6功能,Windows默认true,Linux默认false 更多...
 
int getError () const
 通过getsockopt()+SO_ERROR获取仅属于socket的错误 更多...
 
SockType getType () const
 获取socket类型 更多...
 
bool isListening () const
 socket是否为监听模式 更多...
 
int getAvailable () const
 获取可不阻塞接收的数据量 更多...
 
bool setBlocking (bool blocking)
 设置socket阻塞模式,true为阻塞,false为非阻塞。 更多...
 
int get () const
 Windows:socket句柄,或Linux:socket描述符 更多...
 
 operator bool () const
 判断Socket是否有效 更多...
 

静态 Public 成员函数

static int ErrNo ()
 从errno获取错误码 更多...
 

静态 Public 属性

static int const MsgDefault
 
static int const MsgOob
 
static int const MsgPeek
 
static int const MsgDontRoute
 
static int const MsgWaitAll
 
static int const MsgPartial
 
static int const MsgInterrupt
 
static int const MsgMaxIovLen
 
static int const SdReceive
 
static int const SdSend
 
static int const SdBoth
 

Protected 类型

enum  AttrCategory {
  attrNone, attrBlocking, attrBroadcast, attrReUseAddr,
  attrSendTimeout, attrRecvTimeout, attrSendBufSize, attrRecvBufSize,
  attrIpv6Only
}
 

Protected 成员函数

bool _tryCreate (AddrFamily af, bool hasAf, SockType sockType, bool hasSockType, Protocol proto, bool hasProto)
 如果未创建Socket则尝试创建。如果创建成功或已创建则返回true,如果创建失败则返回false 更多...
 
void _membersInit ()
 
void _resetManaged ()
 

Protected 属性

AddrFamily _addrFamily
 
SockType _sockType
 
Protocol _protocol
 
winux::uint32 _attrSendTimeout
 
winux::uint32 _attrRecvTimeout
 
int _attrSendBufSize
 
int _attrRecvBufSize
 
bool _attrBlocking
 
bool _attrBroadcast
 
bool _attrReUseAddr
 
bool _attrIpv6Only
 
std::vector< AttrCategory_attrExecSets
 
int _sock
 
bool _isNewSock
 

详细描述

套接字基础类

若是新对象,套接字会延迟创建。只有当带EndPoint参数的方法被调用时才会实际创建套接字。相应的方法有:bind()connect()sendTo()recvFrom()

在文件 eiennet_socket.hpp32 行定义.

成员类型定义说明

typedef std::function< void ( size_t hadBytes, void * param ) > eiennet::Socket::FunctionSuccessCallback

在文件 eiennet_socket.hpp171 行定义.

成员枚举类型说明

地址族

枚举值
afUnspec 

Unspecified.

afLocal 

Local to host (pipes and file-domain).

afUnix 

POSIX name for PF_LOCAL.

afFile 

Another non-standard name for PF_LOCAL.

afInet 

IP protocol family.

afAx25 

Amateur Radio AX.25.

afIpx 

Novell Internet Protocol.

afAppletalk 

Appletalk DDP.

afNetrom 

Amateur radio NetROM.

afBridge 

Multiprotocol bridge.

afAtmpvc 

ATM PVCs.

afX25 

Reserved for X.25 project.

afInet6 

IP version 6.

afRose 

Amateur Radio X.25 PLP.

afDecnet 

Reserved for DECnet project.

afNetbeui 

Reserved for 802.2LLC project.

afSecurity 

Security callback pseudo AF.

afKey 

PF_KEY key management API.

afNetlink 
afRoute 

Alias to emulate 4.4BSD.

afPacket 

Packet family.

afAsh 

Ash.

afEconet 

Acorn Econet.

afAtmsvc 

ATM SVCs.

afRds 

RDS sockets.

afSna 

Linux SNA Project

afIrda 

IRDA sockets.

afPppox 

PPPoX sockets.

afWanpipe 

Wanpipe API sockets.

afLlc 

Linux LLC.

afUnknown27 
afUnknown28 
afCan 

Controller Area Network.

afTipc 

TIPC sockets.

afBluetooth 

Bluetooth sockets.

afIucv 

IUCV sockets.

afRxrpc 

RxRPC sockets.

afIsdn 

mISDN sockets.

afPhonet 

Phonet sockets.

afIeee802154 

IEEE 802.15.4 sockets.

afMax 

For now..

在文件 eiennet_socket.hpp38 行定义.

套接字类型

枚举值
sockUnknown 
sockStream 

Sequenced, reliable, connection-based byte streams.

sockDatagram 

Connectionless, unreliable datagrams of fixed maximum length.

sockRaw 

Raw protocol interface.

sockRdm 

Reliably-delivered messages.

sockSeqPacket 

Sequenced, reliable, connection-based, datagrams of fixed maximum length.

sockDccp 

Datagram Congestion Control Protocol.

sockPacket 

Linux specific way of getting packets at the dev level. For writing rarp and other similar things on the user level.

sockCloexec 

Atomically set close-on-exec flag for the new descriptor(s).

sockNonblock 

Atomically mark descriptor(s) as non-blocking.

在文件 eiennet_socket.hpp83 行定义.

协议

枚举值
protoUnspec 
protoIp 

Dummy protocol for TCP.

protoIcmp 

Internet Control Message Protocol.

protoIgmp 

Internet Group Management Protocol.

protoIpip 
protoIpv4 

IPIP tunnels (older KA9Q tunnels use 94).

protoTcp 

Transmission Control Protocol.

protoEgp 

Exterior Gateway Protocol.

protoPup 

PUP protocol.

protoUdp 

User Datagram Protocol.

protoIdp 

XNS IDP protocol.

protoTp 

SO Transport Protocol Class 4.

protoDccp 

Datagram Congestion Control Protocol.

protoIpv6 

IPv6 header.

protoRsvp 

Reservation Protocol.

protoGre 

General Routing Encapsulation.

protoEsp 

encapsulating security payload.

protoAh 

authentication header.

protoMtp 

Multicast Transport Protocol.

protoBeetph 

IP option pseudo header for BEET.

protoEncap 

Encapsulation Header.

protoPim 

Protocol Independent Multicast.

protoComp 

Compression Header Protocol.

protoSctp 

Stream Control Transmission Protocol.

protoUdplite 

UDP-Lite protocol.

protoRaw 

Raw IP packets.

protoMax 

在文件 eiennet_socket.hpp101 行定义.

枚举值
attrNone 
attrBlocking 
attrBroadcast 
attrReUseAddr 
attrSendTimeout 
attrRecvTimeout 
attrSendBufSize 
attrRecvBufSize 
attrIpv6Only 

在文件 eiennet_socket.hpp519 行定义.

构造及析构函数说明

eiennet::Socket::Socket ( int  sock = -1,
bool  isNewSock = false 
)
explicit

构造函数1,包装现有socket描述符

参数
socksocket描述符(Windows平台是socket句柄)
isNewSock指示是否为新建socket。如果为true,则会在Socket摧毁时自动close(sock)
eiennet::Socket::Socket ( AddrFamily  af,
SockType  sockType,
Protocol  proto 
)

构造函数2,指定socket的'地址簇','类型','协议'

virtual eiennet::Socket::~Socket ( )
virtual

移动构造函数

移动赋值操作

成员函数说明

AddrFamily eiennet::Socket::getAddrFamily ( ) const

获取Socket的create()参数:'地址簇'

void eiennet::Socket::setAddrFamily ( AddrFamily  af)

指定Socket的create()参数:'地址簇'

SockType eiennet::Socket::getSockType ( ) const

获取Socket的create()参数:'类型'

void eiennet::Socket::setSockType ( SockType  sockType)

指定Socket的create()参数:'类型'

Protocol eiennet::Socket::getProtocol ( ) const

获取Socket的create()参数:'协议'

void eiennet::Socket::setProtocol ( Protocol  proto)

指定Socket的create()参数:'协议'

void eiennet::Socket::getParams ( AddrFamily af,
SockType sockType,
Protocol proto 
)

获取Socket的create()参数:'地址簇','类型','协议'

void eiennet::Socket::setParams ( AddrFamily  af,
SockType  sockType,
Protocol  proto 
)

指定Socket的create()参数:'地址簇','类型','协议'

bool eiennet::Socket::create ( AddrFamily  af,
SockType  sockType,
Protocol  proto 
)

根据'地址簇','类型','协议'创建一个socket

bool eiennet::Socket::create ( )

根据内部存储的'地址簇','类型','协议'创建一个socket

bool eiennet::Socket::_tryCreate ( AddrFamily  af,
bool  hasAf,
SockType  sockType,
bool  hasSockType,
Protocol  proto,
bool  hasProto 
)
protected

如果未创建Socket则尝试创建。如果创建成功或已创建则返回true,如果创建失败则返回false

可传递指定参数,若不传递则用默认参数

int eiennet::Socket::close ( )

关闭socket描述符

int eiennet::Socket::shutdown ( int  how = SdSend)

关掉socket的相应操作,但并不会close套接字。

Socket::SdReceive:关掉接收操作,Socket::SdSend:关掉发送操作,Socket::SdBoth:都关掉

int eiennet::Socket::send ( void const *  data,
size_t  size,
int  msgFlags = MsgDefault 
)

发送数据。返回已发送大小,出错返回-1。

int eiennet::Socket::send ( winux::AnsiString const &  data,
int  msgFlags = MsgDefault 
)
inline

发送数据。返回已发送大小,出错返回-1。

在文件 eiennet_socket.hpp238 行定义.

int eiennet::Socket::send ( winux::Buffer const &  data,
int  msgFlags = MsgDefault 
)
inline

发送数据。返回已发送大小,出错返回-1。

在文件 eiennet_socket.hpp240 行定义.

bool eiennet::Socket::sendUntil ( size_t  targetSize,
void const *  data,
int  msgFlags = MsgDefault 
)

发送数据,直到发送完指定大小的数据。

如果发送指定大小的数据成功返回true,否则返回false(可能是连接关闭或出错了)。

bool eiennet::Socket::sendUntil ( winux::AnsiString const &  data,
int  msgFlags = MsgDefault 
)
inline

发送字符串,直到发送完该长度的字符串。

如果发送该长度的字符串成功返回true,否则返回false(可能是连接关闭或出错了)。

在文件 eiennet_socket.hpp249 行定义.

bool eiennet::Socket::sendUntil ( winux::Buffer const &  data,
int  msgFlags = MsgDefault 
)
inline

发送缓冲区,直到发送完该大小的缓冲区。

如果发送该大小的缓冲区成功返回true,否则返回false(可能是连接关闭或出错了)。

在文件 eiennet_socket.hpp253 行定义.

int eiennet::Socket::sendWaitUntil ( size_t  targetSize,
void const *  data,
size_t *  hadSent,
double  sec,
int *  rcWait,
FunctionSuccessCallback  eachSuccessCallback = FunctionSuccessCallback(),
void *  param = nullptr,
int  msgFlags = MsgDefault 
)

发送数据,直到发送完指定大小的数据或超时。

*hadSent表示已发送的数据请初始化为0;;sec表示超时值,sec<0则一直等待。
*rcWait接收selec()的返回代码:*rcWait>0:表示可发送数据;*rcWait==0:表示超时;*rcWait<0:表示select()出错。
只有当*rcWait>0时才会发送数据。
返回一次send的数据大小;如果出错返回-1,具体错误查看错误代码getError()/ErrNo()。
判断是否发送完全,需检测*hadSent==targetSize,(注:send()的默认行为是拷贝到socket发送缓冲区,可将发送缓冲区设置为0大小,send()立即发送数据)。
eachSuccessCallback每次成功会调用的回调函数。

int eiennet::Socket::sendWaitUntil ( winux::AnsiString const &  data,
size_t *  hadSent,
double  sec,
int *  rcWait,
FunctionSuccessCallback  eachSuccessCallback = FunctionSuccessCallback(),
void *  param = nullptr,
int  msgFlags = MsgDefault 
)
inline

在文件 eiennet_socket.hpp274 行定义.

int eiennet::Socket::sendWaitUntil ( winux::Buffer const &  data,
size_t *  hadSent,
double  sec,
int *  rcWait,
FunctionSuccessCallback  eachSuccessCallback = FunctionSuccessCallback(),
void *  param = nullptr,
int  msgFlags = MsgDefault 
)
inline

在文件 eiennet_socket.hpp284 行定义.

template<typename _PodType >
bool eiennet::Socket::sendUntilType ( _PodType const &  v,
size_t  size = sizeof(_PodType),
int  msgFlags = MsgDefault 
)
inline

发送一个Plain of Data类型的变量,若成功返回true,否则返回false。

在文件 eiennet_socket.hpp296 行定义.

int eiennet::Socket::recv ( void *  buf,
size_t  size,
int  msgFlags = MsgDefault 
)

尝试接收size大小数据。返回实际接收的数据大小,出错返回-1。

winux::Buffer eiennet::Socket::recv ( size_t  size,
int  msgFlags = MsgDefault 
)

尝试接收size大小数据,返回实际收到的数据Buffer。

返回的Buffer有三种状态:
1、接收到数据,此时(bool)Buffer==true 且 Buffer.getSize() > 0;
2、接收到了0字节数据,此时(bool)Buffer==true 且 Buffer.getSize()==0;
3、recv()发生错误,此时(bool)Buffer==false

bool eiennet::Socket::recvUntilTarget ( winux::AnsiString const &  target,
winux::GrowBuffer data,
winux::GrowBuffer extraData,
int  msgFlags = MsgDefault 
)

接收数据,直到碰到target指定的数据。data返回接收到的数据,data里可以已有部分数据,extraData返回额外接收的数据。

如果碰到target指定的数据成功返回true,否则返回false(可能是连接关闭或出错了)。

int eiennet::Socket::recvWaitUntilTarget ( winux::AnsiString const &  target,
winux::GrowBuffer data,
winux::GrowBuffer extraData,
size_t *  hadRead,
size_t *  startpos,
size_t *  pos,
double  sec,
int *  rcWait,
FunctionSuccessCallback  eachSuccessCallback = FunctionSuccessCallback(),
void *  param = nullptr,
int  msgFlags = MsgDefault 
)

接收数据,直到碰到target指定的数据或者超时。

*startpos表示搜索起始位置并返回下一次搜索位置;*pos返回搜到指定数据的位置,data返回接收到的数据,data里可已有数据;extraData返回额外接收的数据;sec表示超时值,sec<0则一直等待。
请将*startpos赋初值0,*pos赋初值-1。
*rcWait接收selec()的返回代码:*rcWait>0:表示有数据到达;*rcWait==0:表示超时;*rcWait<0:表示select()出错。
只有当*rcWait>0时才会接收数据,数据可能是0大小,表示连接关闭信号。
返回一次recv的数据大小;如果返回0,需检测*rcWait值(若*rcWait>0则表示连接关闭);如果出错返回-1。
判断是否接收完全,需检测*pos!=-1。
eachSuccessCallback每次成功会调用的回调函数。

bool eiennet::Socket::recvUntilSize ( size_t  targetSize,
winux::GrowBuffer data,
int  msgFlags = MsgDefault 
)

接收数据,直到收到指定大小的数据。data返回接收到的数据。

如果data==nullptr,则丢弃数据。 如果收到指定大小的数据成功返回true,否则返回false(可能是连接关闭或出错了)。

int eiennet::Socket::recvWaitUntilSize ( size_t  targetSize,
winux::GrowBuffer data,
size_t *  hadRead,
double  sec,
int *  rcWait,
FunctionSuccessCallback  eachSuccessCallback = FunctionSuccessCallback(),
void *  param = nullptr,
int  msgFlags = MsgDefault 
)

接收数据,直到收到指定大小的数据或者超时。

如果data==nullptr,则丢弃数据。 *hadRead表示已读的数据请初始设为0;data返回接收到的数据;sec表示超时值,sec<0则一直等待。
*rcWait接收selec()的返回代码:*rcWait>0:表示有数据到达;*rcWait==0:表示超时;*rcWait<0:表示select()出错。
只有当*rcWait>0时才会接收数据,数据可能是0大小,表示连接关闭信号。
返回一次recv的数据大小;如果返回0,需检测*rcWait值(若*rcWait>0则表示连接关闭);如果出错返回-1。
判断是否接收完全,需检测*hadRead==targetSize。
eachSuccessCallback每次成功会调用的回调函数。

template<typename _PodType >
bool eiennet::Socket::recvUntilType ( _PodType *  v,
size_t  size = sizeof(_PodType),
int  msgFlags = MsgDefault 
)
inline

接收一个Plain of Data类型的变量,若成功返回true,否则返回false。

在文件 eiennet_socket.hpp365 行定义.

winux::Buffer eiennet::Socket::recvAvail ( int  msgFlags = MsgDefault)

接收不用阻塞即可接收的数据,返回收到的数据Buffer。

返回的Buffer有三种状态:
1、接收到数据,此时(bool)Buffer==true 且 Buffer.getSize() > 0;
2、接收到了0字节数据,此时(bool)Buffer==true 且 Buffer.getSize()==0;
3、recv()发生错误,此时(bool)Buffer==false

winux::Buffer eiennet::Socket::recvWaitAvail ( double  sec,
int *  rcWait,
int  msgFlags = MsgDefault 
)

接收已到达的数据,如果没有到达数据则等待有数据到达或超过指定时间,返回收到的数据Buffer。

*rcWait接收selec()的返回代码:*rcWait>0:表示有数据到达;*rcWait==0:表示超时;*rcWait<0:表示select()出错。
只有当*rcWait>0时才会接收数据,数据可能是0大小,表示连接关闭信号。
返回的Buffer有三种状态:
1、接收到数据,此时(bool)Buffer==true 且 Buffer.getSize() > 0;
2、接收到了0字节数据,此时(bool)Buffer==true 且 Buffer.getSize()==0,也可能是等待超时,需用*rcWait的值判断;
3、recv()发生错误,此时(bool)Buffer==false

int eiennet::Socket::sendTo ( EndPoint const &  ep,
void const *  data,
size_t  size,
int  msgFlags = MsgDefault 
)

无连接模式发送数据到指定端点。返回已发送大小,出错返回-1。

int eiennet::Socket::sendTo ( EndPoint const &  ep,
winux::AnsiString const &  data,
int  msgFlags = MsgDefault 
)
inline

无连接模式发送数据到指定端点。返回已发送大小,出错返回-1。

在文件 eiennet_socket.hpp393 行定义.

int eiennet::Socket::sendTo ( EndPoint const &  ep,
winux::Buffer const &  data,
int  msgFlags = MsgDefault 
)
inline

无连接模式发送数据到指定端点。返回已发送大小,出错返回-1。

在文件 eiennet_socket.hpp395 行定义.

int eiennet::Socket::recvFrom ( EndPoint ep,
void *  buf,
size_t  size,
int  msgFlags = MsgDefault 
)

无连接模式接收数据。返回已接收的大小,出错返回-1。

必须先调用bind()绑定地址,收到数据后ep会返回发送方的端点信息。

winux::Buffer eiennet::Socket::recvFrom ( EndPoint ep,
size_t  size,
int  msgFlags = MsgDefault 
)

无连接模式接收数据。返回实际收到的数据Buffer。

必须先调用bind()绑定地址,收到数据后ep会返回发送方的端点信息。
返回的Buffer有三种状态:
1、接收到数据,此时(bool)Buffer==true 且 Buffer.getSize() > 0;
2、接收到了0字节数据,此时(bool)Buffer==true 且 Buffer.getSize()==0;
3、recv()发生错误,此时(bool)Buffer==false

bool eiennet::Socket::connect ( EndPoint const &  ep)

连接服务器

bool eiennet::Socket::bind ( EndPoint const &  ep)

绑定地址。若套接字尚未创建则创建套接字

bool eiennet::Socket::listen ( int  backlog)

监听

bool eiennet::Socket::accept ( int *  sock,
EndPoint ep = NULL 
)

接受一个客户连接

成功则*sock输出Socket句柄,调用者负责close()

winux::SharedPointer<Socket> eiennet::Socket::accept ( EndPoint ep = NULL)
inline

接受一个客户连接

在文件 eiennet_socket.hpp425 行定义.

int eiennet::Socket::getRecvBufSize ( ) const

获取接收缓冲区大小

bool eiennet::Socket::setRecvBufSize ( int  optval)

设置接收缓冲区大小

int eiennet::Socket::getSendBufSize ( ) const

获取发送缓冲区大小

bool eiennet::Socket::setSendBufSize ( int  optval)

设置发送缓冲区大小

winux::uint32 eiennet::Socket::getRecvTimeout ( ) const

获取接收超时(ms)

bool eiennet::Socket::setRecvTimeout ( winux::uint32  optval)

设置接收超时(ms)

winux::uint32 eiennet::Socket::getSendTimeout ( ) const

获取发送超时(ms)

bool eiennet::Socket::setSendTimeout ( winux::uint32  optval)

设置发送超时(ms)

在Windows上,发送似乎由系统后台进行,send()总是立即返回全部发送的数据大小,设置超时似乎无用。

bool eiennet::Socket::getReUseAddr ( ) const

获取是否开启了重用地址

bool eiennet::Socket::setReUseAddr ( bool  optval)

设置socket是否重用地址,默认false不重用

bool eiennet::Socket::getBroadcast ( ) const

获取是否启用广播

bool eiennet::Socket::setBroadcast ( bool  optval)

设置socket是否广播,默认false非广播

bool eiennet::Socket::getIpv6Only ( ) const

获取IPV6套接字是否只启用IPV6功能,Windows默认true,Linux默认false

bool eiennet::Socket::setIpv6Only ( bool  optval)

设置IPV6套接字是否只启用IPV6功能,Windows默认true,Linux默认false

int eiennet::Socket::getError ( ) const

通过getsockopt()+SO_ERROR获取仅属于socket的错误

SockType eiennet::Socket::getType ( ) const

获取socket类型

bool eiennet::Socket::isListening ( ) const

socket是否为监听模式

默认从getsockopt(SO_ACCEPTCONN)读取

int eiennet::Socket::getAvailable ( ) const

获取可不阻塞接收的数据量

bool eiennet::Socket::setBlocking ( bool  blocking)

设置socket阻塞模式,true为阻塞,false为非阻塞。

int eiennet::Socket::get ( ) const

Windows:socket句柄,或Linux:socket描述符

eiennet::Socket::operator bool ( ) const
inline

判断Socket是否有效

在文件 eiennet_socket.hpp495 行定义.

static int eiennet::Socket::ErrNo ( )
static

从errno获取错误码

void eiennet::Socket::_membersInit ( )
inlineprotected

在文件 eiennet_socket.hpp538 行定义.

void eiennet::Socket::_resetManaged ( )
inlineprotected

在文件 eiennet_socket.hpp561 行定义.

类成员变量说明

int const eiennet::Socket::MsgDefault
static

在文件 eiennet_socket.hpp132 行定义.

int const eiennet::Socket::MsgOob
static

在文件 eiennet_socket.hpp134 行定义.

int const eiennet::Socket::MsgPeek
static

在文件 eiennet_socket.hpp135 行定义.

int const eiennet::Socket::MsgDontRoute
static

在文件 eiennet_socket.hpp136 行定义.

int const eiennet::Socket::MsgWaitAll
static

在文件 eiennet_socket.hpp137 行定义.

int const eiennet::Socket::MsgPartial
static

在文件 eiennet_socket.hpp138 行定义.

int const eiennet::Socket::MsgInterrupt
static

在文件 eiennet_socket.hpp139 行定义.

int const eiennet::Socket::MsgMaxIovLen
static

在文件 eiennet_socket.hpp140 行定义.

int const eiennet::Socket::SdReceive
static

在文件 eiennet_socket.hpp167 行定义.

int const eiennet::Socket::SdSend
static

在文件 eiennet_socket.hpp168 行定义.

int const eiennet::Socket::SdBoth
static

在文件 eiennet_socket.hpp169 行定义.

AddrFamily eiennet::Socket::_addrFamily
protected

在文件 eiennet_socket.hpp504 行定义.

SockType eiennet::Socket::_sockType
protected

在文件 eiennet_socket.hpp505 行定义.

Protocol eiennet::Socket::_protocol
protected

在文件 eiennet_socket.hpp506 行定义.

winux::uint32 eiennet::Socket::_attrSendTimeout
protected

在文件 eiennet_socket.hpp509 行定义.

winux::uint32 eiennet::Socket::_attrRecvTimeout
protected

在文件 eiennet_socket.hpp510 行定义.

int eiennet::Socket::_attrSendBufSize
protected

在文件 eiennet_socket.hpp511 行定义.

int eiennet::Socket::_attrRecvBufSize
protected

在文件 eiennet_socket.hpp512 行定义.

bool eiennet::Socket::_attrBlocking
protected

在文件 eiennet_socket.hpp513 行定义.

bool eiennet::Socket::_attrBroadcast
protected

在文件 eiennet_socket.hpp514 行定义.

bool eiennet::Socket::_attrReUseAddr
protected

在文件 eiennet_socket.hpp515 行定义.

bool eiennet::Socket::_attrIpv6Only
protected

在文件 eiennet_socket.hpp516 行定义.

std::vector<AttrCategory> eiennet::Socket::_attrExecSets
protected

在文件 eiennet_socket.hpp531 行定义.

int eiennet::Socket::_sock
protected

在文件 eiennet_socket.hpp534 行定义.

bool eiennet::Socket::_isNewSock
protected

在文件 eiennet_socket.hpp535 行定义.


该类的文档由以下文件生成: