Address() {
clear();
}
+ Address(const Address &b) {
+ clear();
+ addr->dests[0].addr = b.addr->dests[0].addr;
+ addr->dests[0].port = b.addr->dests[0].port;
+ }
Address(const char* ip, uint16_t port) {
clear();
set_ipv4(ip);
}
uint32_t ipv4 () const { return ntohl(addr->dests[0].addr); }
uint16_t port () const { return ntohs(addr->dests[0].port); }
+ Address& operator = (const Address& b) {
+ if (this != &b) {
+ free(addr);
+ clear();
+ addr->dests[0].addr = b.addr->dests[0].addr;
+ addr->dests[0].port = b.addr->dests[0].port;
+ }
+ return *this;
+ }
bool operator == (const Address& b) const {
return addr->count == b.addr->count &&
addr->dests[0].port==b.addr->dests[0].port &&
static void LibeventSendCallback(int fd, short event, void *arg);
static void LibeventReceiveCallback(int fd, short event, void *arg);
static void RecvDatagram (evutil_socket_t socket); // Called by LibeventReceiveCallback
- static int RecvFrom(evutil_socket_t sock, Address& addr, struct evbuffer *evb); // Called by RecvDatagram
- static int SendTo(evutil_socket_t sock, const Address& addr, struct evbuffer *evb); // Called by Channel::Send()
+ static int RecvFrom(evutil_socket_t sock, Address& addr, struct evbuffer **evb); // Called by RecvDatagram
+ static int SendTo(evutil_socket_t sock, const Address& addr, struct evbuffer **evb); // Called by Channel::Send()
static evutil_socket_t Bind(Address address, sckrwecb_t callbacks=sckrwecb_t());
static Address BoundAddress(evutil_socket_t sock);
static evutil_socket_t default_socket()