acl  3.5.3.0
acl::socket_stream类 参考

#include <socket_stream.hpp>

+ 类 acl::socket_stream 继承关系图:
+ acl::socket_stream 的协作图:

Public 成员函数

 socket_stream (void)
 
virtual ~socket_stream (void)
 
bool open (int fd, bool udp_mode=false)
 
bool open (ACL_VSTREAM *vstream, bool udp_mode=false)
 
bool open (const char *addr, int conn_timeout, int rw_timeout, time_unit_t unit=time_unit_s)
 
bool bind_udp (const char *addr, int rw_timeout=0, unsigned flag=0)
 
bool shutdown_read (void)
 
bool shutdown_write (void)
 
bool shutdown_readwrite (void)
 
int sock_handle (void) const
 
int unbind_sock (void)
 
int sock_type (void) const
 
const char * get_peer (bool full=false) const
 
const char * get_peer_ip (void) const
 
bool set_peer (const char *addr)
 
const char * get_local (bool full=false) const
 
const char * get_local_ip (void) const
 
bool set_local (const char *addr)
 
bool alive (void) const
 
socket_streamset_tcp_nodelay (bool on)
 
socket_streamset_tcp_solinger (bool on, int linger)
 
socket_streamset_tcp_sendbuf (int size)
 
socket_streamset_tcp_recvbuf (int size)
 
socket_streamset_tcp_non_blocking (bool on)
 
bool get_tcp_nodelay (void)
 
int get_tcp_solinger (void)
 
int get_tcp_sendbuf (void)
 
int get_tcp_recvbuf (void)
 
bool get_tcp_non_blocking (void)
 
- Public 成员函数 继承自 acl::istream
 istream (void)
 
virtual ~istream (void)
 
int read (void *buf, size_t size, bool loop=true)
 
bool readtags (void *buf, size_t *inout, const char *tag, size_t len)
 
bool gets (void *buf, size_t *size_inout, bool nonl=true)
 
bool read (long long int &n, bool loop=true)
 
bool read (int &n, bool loop=true)
 
bool read (short &n, bool loop=true)
 
bool read (char &ch)
 
bool read (string &s, bool loop=true)
 
bool read (string *s, bool loop=true)
 
bool read (string &s, size_t max, bool loop=true)
 
bool read (string *s, size_t max, bool loop=true)
 
bool gets (string &s, bool nonl=true, size_t max=0)
 
bool gets (string *s, bool nonl=true, size_t max=0)
 
bool readtags (string &s, const string &tag)
 
bool readtags (string *s, const string &tag)
 
int getch (void)
 
int ugetch (int ch)
 
bool gets_peek (string &buf, bool nonl=true, bool clear=false, int max=0)
 
bool gets_peek (string *buf, bool nonl=true, bool clear=false, int max=0)
 
bool read_peek (string &buf, bool clear=false)
 
bool read_peek (string *buf, bool clear=false)
 
int read_peek (void *buf, size_t size)
 
bool readn_peek (string &buf, size_t cnt, bool clear=false)
 
bool readn_peek (string *buf, size_t cnt, bool clear=false)
 
istreamoperator>> (string &s)
 
istreamoperator>> (long long int &n)
 
istreamoperator>> (int &n)
 
istreamoperator>> (short &n)
 
istreamoperator>> (char &ch)
 
- Public 成员函数 继承自 acl::stream
 stream (void)
 
virtual ~stream (void)=0
 
bool close (void)
 
bool eof (void) const
 
void clear_eof (void)
 
bool opened (void) const
 
ACL_VSTREAMget_vstream (void) const
 
ACL_VSTREAMunbind (void)
 
bool set_ctx (void *ctx, const char *key=NULL, bool replace=true)
 
void * get_ctx (const char *key=NULL) const
 
void * del_ctx (const char *key=NULL)
 
void set_rw_timeout (int n)
 
void set_time_unit (time_unit_t unit)
 
int get_rw_timeout (void) const
 
stream_hooksetup_hook (stream_hook *hook)
 
stream_hookget_hook (void) const
 
stream_hookremove_hook (void)
 
stringget_buf (void)
 
dbuf_poolget_dbuf (void)
 
- Public 成员函数 继承自 acl::ostream
 ostream (void)
 
virtual ~ostream (void)
 
int write (const void *data, size_t size, bool loop=true, bool buffed=false)
 
bool fflush (void)
 
int writev (const struct iovec *v, int count, bool loop=true)
 
int vformat (const char *fmt, va_list ap)
 
int format (const char *fmt,...) ACL_CPP_PRINTF(2
 
int int write (long long int n)
 
int write (int n)
 
int write (short n)
 
int write (char ch)
 
int write (const string &s, bool loop=true)
 
int puts (const char *s)
 
ostreamoperator<< (const string &s)
 
ostreamoperator<< (const char *s)
 
ostreamoperator<< (long long int n)
 
ostreamoperator<< (int n)
 
ostreamoperator<< (short n)
 
ostreamoperator<< (char ch)
 
virtual int push_pop (const char *in, size_t len, string *out=NULL, size_t max=0)
 
virtual int pop_end (string *out, size_t max=0)
 
- Public 成员函数 继承自 acl::pipe_stream
 pipe_stream ()
 
virtual ~pipe_stream ()
 
virtual void clear ()
 

额外继承的成员函数

- Protected 成员函数 继承自 acl::stream
void open_stream (bool is_file=false)
 
void reopen_stream (bool is_file=false)
 
- Protected 成员函数 继承自 acl::acl::noncopyable
 noncopyable ()
 
 ~noncopyable ()
 
- Protected 属性 继承自 acl::stream
stream_hookhook_
 
ACL_VSTREAMstream_
 
stringbuf_
 
dbuf_pooldbuf_
 
void * default_ctx_
 
std::map< string, void * > * ctx_table_
 
bool eof_
 
bool opened_
 

详细描述

在文件 socket_stream.hpp14 行定义.

构造及析构函数说明

◆ socket_stream()

acl::socket_stream::socket_stream ( void  )

◆ ~socket_stream()

virtual acl::socket_stream::~socket_stream ( void  )
virtual

成员函数说明

◆ alive()

bool acl::socket_stream::alive ( void  ) const

检查套接口连接的存活状态(内部使用了非阻塞读的方式进行探测)

返回
{bool} 当网络连接未打开或已经关闭时该函数返回 false,如果 连接正常则返回 true

◆ bind_udp()

bool acl::socket_stream::bind_udp ( const char *  addr,
int  rw_timeout = 0,
unsigned  flag = 0 
)

绑定本地 UDP 地址,创建 UDP 网络流对象

参数
addr{const char*} 本机地址,格式:ip:port;该地址也可以为 UNIX 域套接字或 Linux 抽象域套接字(Linux abstract unix socket)
rw_timeout{int} 读写超时时间(秒)
flag{unsigned}
返回
{bool} 绑定是否成功

◆ get_local()

const char* acl::socket_stream::get_local ( bool  full = false) const

获得连接的本地地址

参数
full{bool} 是否获得完整地址,即:IP:PORT,如果该参数 为 false,则仅返回 IP,否则返回 IP:PORT
返回
{const char*} 该连接的本地地址,若返回值 == "" 则表示 无法获得本地地址

◆ get_local_ip()

const char* acl::socket_stream::get_local_ip ( void  ) const

获得连接的本地 IP 地址

返回
{const char*} 该连接的本地地址,若返回值 == "" 则表示 无法获得本地地址

◆ get_peer()

const char* acl::socket_stream::get_peer ( bool  full = false) const

获得远程连接的地址

参数
full{bool} 是否获得完整地址,即:IP:PORT,如果该参数 为 false,则仅返回 IP,否则返回 IP:PORT
返回
{const char*} 远程连接地址,若返回值 == '\0' 则表示 无法获得远程连接地址

◆ get_peer_ip()

const char* acl::socket_stream::get_peer_ip ( void  ) const

获得远程连接的 IP 地址

返回
{const char*} 远程连接地址,若返回值 == '\0' 则表示 无法获得远程连接地址

◆ get_tcp_nodelay()

bool acl::socket_stream::get_tcp_nodelay ( void  )

获得 TCP 套接字是否设置了 nodelay 选项

返回
{bool} true 表示打开,false 表示关闭

◆ get_tcp_non_blocking()

bool acl::socket_stream::get_tcp_non_blocking ( void  )

判断当前套接字是否被设置了非阻塞模式

返回
{bool} 注:该方法目前仅支持 UNIX 平台

◆ get_tcp_recvbuf()

int acl::socket_stream::get_tcp_recvbuf ( void  )

获取 TCP 套接字的读缓冲区大小

返回
{int} 缓冲区大小

◆ get_tcp_sendbuf()

int acl::socket_stream::get_tcp_sendbuf ( void  )

获取 TCP 套接字的写缓冲区大小

返回
{int} 缓冲区大小

◆ get_tcp_solinger()

int acl::socket_stream::get_tcp_solinger ( void  )

获得 TCP 套接字的 linger 值

返回
{int} 返回 -1 表示未设置 linger 选项或内部出错,>= 0 表示设置了 linger 选项且该值表示套接字关闭后该 TCP 连接在内核中 维持 TIME_WAIT 状态的逗留时间(秒)

◆ open() [1/3]

bool acl::socket_stream::open ( int  fd,
bool  udp_mode = false 
)

根据套接字打开的一个网络流

参数
fd套接字
udp_mode{bool} 是否是 UDP 方式
返回
{bool} 连接是否成功

◆ open() [2/3]

bool acl::socket_stream::open ( ACL_VSTREAM vstream,
bool  udp_mode = false 
)

根据 ACL_VSTREAM 流打开网络流

参数
vstream{ACL_VSTREAM*}
udp_mode{bool} 是否是 UDP 方式
返回
{bool} 连接是否成功

◆ open() [3/3]

bool acl::socket_stream::open ( const char *  addr,
int  conn_timeout,
int  rw_timeout,
time_unit_t  unit = time_unit_s 
)

连接远程服务器并打开网络连接流

参数
addr{const char*} 服务器地址, 若连接域套接口服务器(UNIX平台), 域套接地址:/tmp/test.sock,在Linux 平台下还可连接抽象域套接字,即 abastract unix socket,为了与普通基于文件路径的unix域套接地址区别, 在 acl 库中规定如果地址第一个字节为 @,则认为是 Linux 抽象域套接字 (abstract unix domain socket)不过需注意该功能仅有 Linux 平台支持, 举例,如:@/tmp/test.sock;; 如果连接一个TCP服务器,则地址格式为: remote_addr[@local_ip], 如: www.sina.com:80@60.nosp@m..28..nosp@m.250.1.nosp@m.99, 意思是绑定本的网卡地址为: 60.28.250.199, 远程连接 www.sina.com 的 80, 如果由OS自动绑定本地 IP 地址,则可以写为:www.sina.com:80
conn_timeout{int} 连接超时时间(单位值取决于 use_ms)
rw_timeout{int} 读写超时时间(单位值取决于 use_ms)
unit{time_unit_t} 超时时间的时间单位
返回
{bool} 连接是否成功

◆ set_local()

bool acl::socket_stream::set_local ( const char *  addr)

设置本地地址

参数
addr{const char*} 地址,格式:ip:port
返回
{bool} 当流对象未打开时返回 false

◆ set_peer()

bool acl::socket_stream::set_peer ( const char *  addr)

设置远程连接对象的地址,对于 TCP 传输方式,不需要显示调用此函数 设置远程对象地址,UDP 传输方式时需要调用此函数设置远程地址,然后 才可以向远程连接写数据

参数
addr{const char*} 远程连接对象的地址,格式:ip:port
返回
{bool} 当流对象未打开时返回 false

◆ set_tcp_nodelay()

socket_stream& acl::socket_stream::set_tcp_nodelay ( bool  on)

设置 TCP 套接字的 nodelay 功能

参数
on{bool} true 表示打开,false 表示关闭
返回
{socket_stream&}

◆ set_tcp_non_blocking()

socket_stream& acl::socket_stream::set_tcp_non_blocking ( bool  on)

设置 TCP 套接字的非阻塞状态

参数
on{bool} 是否设置为非阻塞状态,当为 true 时, 则该套接字被设为非阻塞状态;否则为阻塞状态
返回
{socket_stream&}

◆ set_tcp_recvbuf()

socket_stream& acl::socket_stream::set_tcp_recvbuf ( int  size)

设置 TCP 套接字的读缓冲区大小

参数
size{int} 缓冲区设置大小
返回
{socket_stream&}

◆ set_tcp_sendbuf()

socket_stream& acl::socket_stream::set_tcp_sendbuf ( int  size)

设置 TCP 套接字的写缓冲区大小

参数
size{int} 缓冲区设置大小
返回
{socket_stream&}

◆ set_tcp_solinger()

socket_stream& acl::socket_stream::set_tcp_solinger ( bool  on,
int  linger 
)

设置 TCP 套接字的 SO_LINGER 选项

参数
on{bool} 是否启用 SO_LINGER 选项
linger{int} 当SO_LINGER打开时,取消 timed_wait 的时间,单位为秒
返回
{socket_stream&}

◆ shutdown_read()

bool acl::socket_stream::shutdown_read ( void  )

关闭套接口读操作

返回
{bool}

◆ shutdown_readwrite()

bool acl::socket_stream::shutdown_readwrite ( void  )

关闭套接口读写操作

返回
{bool}

◆ shutdown_write()

bool acl::socket_stream::shutdown_write ( void  )

关闭套接口写操作

返回
{bool}

◆ sock_handle()

int acl::socket_stream::sock_handle ( void  ) const

获得网络连接流的套接字连接句柄

返回
{ACL_SOCKET} 若出错,则返回 - 1(UNIX 平台) 或 INVALID_SOCKET(win32平台)

◆ sock_type()

int acl::socket_stream::sock_type ( void  ) const

获得 socket 的类型

返回
{int} 返回值有:AF_INET, AF_INT6, AF_UNIX,出错时返回 -1

◆ unbind_sock()

int acl::socket_stream::unbind_sock ( void  )

解绑套接字与流对象的绑定关系,同时将套接字返回给用户,即 将该套接字的管理权交给用户,本流对象在释放时不会关闭该套 接字,但用户接管该套接字后用完后必须将其关闭 解绑后除了 close/open 的调用有意义外,其它的调用(包括流对 象读写在内)都无意义

返回
{ACL_SOCKET} 返回 ACL_SOCKET_INVALID 表示该流对象 已经将套接字解绑

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