本文整理汇总了C++中SmartPointer::IP方法的典型用法代码示例。如果您正苦于以下问题:C++ SmartPointer::IP方法的具体用法?C++ SmartPointer::IP怎么用?C++ SmartPointer::IP使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SmartPointer
的用法示例。
在下文中一共展示了SmartPointer::IP方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Perform
FollowUp ListeningSocket::Perform (const Notification & n) {
FollowUp retr;
if (do_shutdown) {
retr.Remove=true;
return retr;
}
for (;;) {
struct sockaddr_storage addr;
socklen_t len=sizeof(addr);
auto socket=accept(
this->socket,
reinterpret_cast<struct sockaddr *>(&addr),
&len
);
// Check for failure
if (socket==-1) {
// Was the failure just because
// the operation would block?
if (WouldBlock()) break;
// Were we interrupted?
if (WasInterrupted()) continue;
// Actually an error
Raise();
}
// Increment statistic
++retr.Accepted;
auto ep=GetEndpoint(&addr);
SmartPointer<Connection> conn;
try {
conn=SmartPointer<Connection>::Make(
socket,
ep.IP,
ep.Port,
this->ep.IP,
this->ep.Port,
this->ep.Receive,
this->ep.Disconnect
);
} catch (...) {
// Make sure the socket gets
// closed
close(socket);
throw;
}
// Fire off a callback to handle this
// incoming connections
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wpedantic"
retr.Action.Add([
this,
conn=std::move(conn),
socket
] (SmartPointer<ChannelBase> channel) mutable {
FollowUp f;
// Should this connection be allowed?
if (this->ep.Accept) {
try {
// If the connection is not admitted,
// return at once, the connection will
// automatically be dropped by the Socket
// RAII container
if (!this->ep.Accept(AcceptEvent{
conn->IP(),
conn->Port(),
this->ep.IP,
this->ep.Port
})) return f;
} catch (...) {
// Consider throwing the same thing
// as returning false
return f;
}
}
//.........这里部分代码省略.........