mirror of
https://gitee.com/acl-dev/acl.git
synced 2024-12-02 20:08:21 +08:00
add sendto() in ostream class
This commit is contained in:
parent
01a7af4eb1
commit
2f8f33631c
@ -35,6 +35,29 @@ public:
|
||||
int write(const void* data, size_t size, bool loop = true,
|
||||
bool buffed = false);
|
||||
|
||||
/**
|
||||
* 当采用报文方式发送数据时,可调用本方法向目标地址发送数据包
|
||||
* @param data {const void*} 数据地址
|
||||
* @param len {int} 数据长度
|
||||
* @param dest_addr {const char*} 目标地址,格式:ip|port
|
||||
* @param flags {int} 发送标志位,请参考系统 sendto() api 中 flags 说明
|
||||
* @return {int} 返回 -1 表示发送失败
|
||||
*/
|
||||
int sendto(const void* data, size_t size,
|
||||
const char* dest_addr, int flags = 0);
|
||||
|
||||
/**
|
||||
* 当采用报文方式发送数据时,可调用本方法向目标地址发送数据包
|
||||
* @param data {const void*} 数据地址
|
||||
* @param len {int} 数据长度
|
||||
* @param dest_addr {const sockaddr*} 目标地址,格式:ip|port
|
||||
* @param addrlen {int} dest_addr 地址长度
|
||||
* @param flags {int} 发送标志位,请参考系统 sendto() api 中 flags 说明
|
||||
* @return {int} 返回 -1 表示发送失败
|
||||
*/
|
||||
int sendto(const void* data, size_t size,
|
||||
const struct sockaddr* dest_addr, int addrlen, int flags = 0);
|
||||
|
||||
/**
|
||||
* 如果采用写缓冲方式,则最后需要调用本函数刷写缓冲区
|
||||
* @return {bool} 返回 false 表示写失败,有可能是连接关闭
|
||||
|
@ -25,6 +25,31 @@ int ostream::write(const void* data, size_t size, bool loop /* = true */,
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ostream::sendto(const void* data, size_t len, const char* dest_addr, int flags)
|
||||
{
|
||||
ACL_SOCKADDR sa;
|
||||
size_t addrlen = acl_sane_pton(dest_addr, (struct sockaddr*) &sa);
|
||||
if (addrlen == 0) {
|
||||
logger_error("invalid dest_addr=%s", dest_addr);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return sendto(data, len, (const struct sockaddr*) &sa, (int) addrlen, flags);
|
||||
}
|
||||
|
||||
int ostream::sendto(const void* data, size_t len,
|
||||
const struct sockaddr* dest_addr, int addrlen, int flags)
|
||||
{
|
||||
acl_assert(stream_);
|
||||
ACL_SOCKET fd = ACL_VSTREAM_SOCK(stream_);
|
||||
|
||||
#if defined(_WIN32) || defined(_WIN64)
|
||||
return (int) ::sendto(fd, (char*) data, len, flags, dest_addr, addrlen);
|
||||
#else
|
||||
return (int) ::sendto(fd, data, len, flags, dest_addr, (socklen_t) addrlen);
|
||||
#endif
|
||||
}
|
||||
|
||||
bool ostream::fflush(void)
|
||||
{
|
||||
if (acl_vstream_fflush(stream_) == ACL_VSTREAM_EOF) {
|
||||
|
Loading…
Reference in New Issue
Block a user