acl/lib_acl_cpp/samples/udp/udp_pkt.h

124 lines
2.7 KiB
C
Raw Normal View History

#pragma once
2018-12-12 11:16:12 +08:00
#include <vector>
#include "sock_addr.h"
class udp_sock;
/**
* UDP
2018-12-12 11:16:12 +08:00
*/
class udp_pkt
{
public:
/**
*
* @param size {size_t} udp
2018-12-12 11:16:12 +08:00
*/
udp_pkt(size_t size = 1460);
~udp_pkt(void);
/**
*
* @param data {const void*} NULL
* @param len {size_t} > 0 <=
* @return {bool} false
2018-12-12 11:16:12 +08:00
*/
bool set_data(const void* data, size_t len);
/**
*
* @param addr {const char*} udp
* @return {bool} false
2018-12-12 11:16:12 +08:00
*/
bool set_peer(const char* addr);
/**
* get_dlen
2018-12-12 11:16:12 +08:00
* @return {void*}
*/
void* get_data(void) const
{
return iov_.iov_base;
}
/**
*
2018-12-12 11:16:12 +08:00
* @return {size_t}
*/
size_t get_dlen(void) const
{
return iov_.iov_len;
}
/**
*
* @return {int} < 0
2018-12-12 11:16:12 +08:00
*/
int get_port(void) const;
/**
* IP
* @return {const char*} NULL
2018-12-12 11:16:12 +08:00
*/
const char* get_ip(void) const;
private:
friend class udp_sock;
struct iovec iov_; // 存放收/发的数据地址及长度
const size_t size_; // 构造时设定后不能再修改
SOCK_ADDR addr_; // 源地址
2018-12-12 11:16:12 +08:00
socklen_t addr_len_;
char ipbuf_[64];
};
/**
* UDP
2018-12-12 11:16:12 +08:00
*/
class udp_pkts
{
public:
/**
*
* @param max {size_t} UDP > 0
2018-12-12 11:16:12 +08:00
*/
udp_pkts(size_t max);
~udp_pkts(void);
/**
*
* @param i {size_t}
* @return {udp_pkt*} NULL
2018-12-12 11:16:12 +08:00
*/
udp_pkt* operator[](size_t i);
/**
*
2018-12-12 11:16:12 +08:00
* @return {size_t}
*/
size_t get_npkt(void) const
{
return npkt_;
}
/**
*
* upd_sock
* @param n {size_t}
2018-12-12 11:16:12 +08:00
*/
void set_npkt(size_t n);
protected:
friend class udp_sock;
std::vector<udp_pkt*>& get_pkts(void)
{
return pkts_;
}
private:
std::vector<udp_pkt*> pkts_;
size_t max_;
size_t npkt_;
};