fastdo  0.6.8
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的'地址簇','类型','协议'. 更多...
 
 Socket (Socket &&other)
 移动构造函数 更多...
 
Socketoperator= (Socket &&other)
 移动赋值操作 更多...
 
virtual ~Socket ()
 
void setParams (AddrFamily af, SockType sockType, Protocol proto)
 指定socket的参数:'地址簇','类型','协议' 更多...
 
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 , size_t _N = sizeof(_PodType)>
bool sendUntilType (_PodType const &v, 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 , size_t _N = sizeof(_PodType)>
bool recvUntilType (_PodType *v, 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, SockType sockType=sockStream)
 绑定地址。若套接字尚未创建则创建套接字,sockType指定套接字类型。通常需要绑定地址的是服务端,一般使用sockStream。 更多...
 
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非广播 更多...
 
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 属性

winux::MembersWrapper< struct Socket_Data > _self
 

详细描述

套接字基础类

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

在文件 eiennet_socket.hpp47 行定义.

成员类型定义说明

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

在文件 eiennet_socket.hpp187 行定义.

成员枚举类型说明

地址族

枚举值
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.hpp54 行定义.

协议

枚举值
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.hpp117 行定义.

套接字类型

枚举值
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.hpp99 行定义.

构造及析构函数说明

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

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

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

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

eiennet::Socket::Socket ( Socket &&  other)

移动构造函数

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

成员函数说明

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

接受一个客户连接

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

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

接受一个客户连接

在文件 eiennet_socket.hpp409 行定义.

bool eiennet::Socket::bind ( EndPoint const &  ep,
SockType  sockType = sockStream 
)

绑定地址。若套接字尚未创建则创建套接字,sockType指定套接字类型。通常需要绑定地址的是服务端,一般使用sockStream。

int eiennet::Socket::close ( )

关闭socket描述符

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

连接服务器

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

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

bool eiennet::Socket::create ( )

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

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

从errno获取错误码

int eiennet::Socket::get ( ) const

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

int eiennet::Socket::getAvailable ( ) const

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

bool eiennet::Socket::getBroadcast ( ) const

获取是否启用广播

int eiennet::Socket::getError ( ) const

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

int eiennet::Socket::getRecvBufSize ( ) const

获取接收缓冲区大小

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

获取接收超时(ms)

bool eiennet::Socket::getReUseAddr ( ) const

获取是否开启了重用地址

int eiennet::Socket::getSendBufSize ( ) const

获取发送缓冲区大小

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

获取发送超时(ms)

SockType eiennet::Socket::getType ( ) const

获取socket类型

bool eiennet::Socket::isListening ( ) const

socket是否为监听模式

默认从getsockopt(SO_ACCEPTCONN)读取

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

监听

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

判断Socket是否有效

在文件 eiennet_socket.hpp474 行定义.

Socket& eiennet::Socket::operator= ( Socket &&  other)

移动赋值操作

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

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

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

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

若ep给定一个有效的端点信息,则会绑定此ep,从此ep接收数据。收到数据后ep会返回发送方的端点信息。

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

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

若ep给定一个有效的端点信息,则会绑定此ep,从此ep接收数据。收到数据后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::recvUntilSize ( size_t  targetSize,
winux::GrowBuffer data,
int  msgFlags = MsgDefault 
)

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

如果收到指定大小的数据成功返回true,否则返回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(可能是连接关闭或出错了)。

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

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

在文件 eiennet_socket.hpp349 行定义.

函数调用图:

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::recvWaitUntilSize ( size_t  targetSize,
winux::GrowBuffer data,
size_t *  hadRead,
double  sec,
int *  rcWait,
FunctionSuccessCallback  eachSuccessCallback = FunctionSuccessCallback(),
void *  param = nullptr,
int  msgFlags = MsgDefault 
)

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

*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每次成功会调用的回调函数。

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每次成功会调用的回调函数。

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.hpp230 行定义.

函数调用图:

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

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

在文件 eiennet_socket.hpp232 行定义.

函数调用图:

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.hpp377 行定义.

函数调用图:

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

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

在文件 eiennet_socket.hpp379 行定义.

函数调用图:

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

在文件 eiennet_socket.hpp238 行定义.

函数调用图:

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

在文件 eiennet_socket.hpp239 行定义.

函数调用图:

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

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

在文件 eiennet_socket.hpp282 行定义.

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.hpp260 行定义.

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.hpp270 行定义.

函数调用图:

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

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

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

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

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

指定socket的参数:'地址簇','类型','协议'

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

设置接收缓冲区大小

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

设置接收超时(ms)

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

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

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

设置发送缓冲区大小

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

设置发送超时(ms)

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

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

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

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

类成员变量说明

winux::MembersWrapper<struct Socket_Data> eiennet::Socket::_self
protected

在文件 eiennet_socket.hpp482 行定义.

int const eiennet::Socket::MsgDefault
static

在文件 eiennet_socket.hpp148 行定义.

int const eiennet::Socket::MsgDontRoute
static

在文件 eiennet_socket.hpp152 行定义.

int const eiennet::Socket::MsgInterrupt
static

在文件 eiennet_socket.hpp155 行定义.

int const eiennet::Socket::MsgMaxIovLen
static

在文件 eiennet_socket.hpp156 行定义.

int const eiennet::Socket::MsgOob
static

在文件 eiennet_socket.hpp150 行定义.

int const eiennet::Socket::MsgPartial
static

在文件 eiennet_socket.hpp154 行定义.

int const eiennet::Socket::MsgPeek
static

在文件 eiennet_socket.hpp151 行定义.

int const eiennet::Socket::MsgWaitAll
static

在文件 eiennet_socket.hpp153 行定义.

int const eiennet::Socket::SdBoth
static

在文件 eiennet_socket.hpp185 行定义.

int const eiennet::Socket::SdReceive
static

在文件 eiennet_socket.hpp183 行定义.

int const eiennet::Socket::SdSend
static

在文件 eiennet_socket.hpp184 行定义.


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