Bind():
net_ = new NetImpl;
auto ret = net_->sock->bind(conf.local_port);
if (!ret)
{
/// bind to localaddress failed
LOG(ERROR) << "bind to local address failed,port:" << conf.local_port;
return EPlatError_Failed;
}
Read():
auto data = ptr->net_->sock->receiveDatagram();
if (data.senderAddress().toIPv4Address() != QHostAddress(ptr->config_.remote_addr.c_str()).toIPv4Address())
{
continue;
读之前可以先做判断:
if (ptr->net_ != nullptr && ptr->net_->sock->hasPendingDatagrams())
Write():
auto cnt = net_->sock->writeDatagram((const char *)buf, len,
QHostAddress(config_.remote_addr.c_str()), config_.remote_port);
Close();
/// unbind socket
net_->sock->close();
delete net_;