当前位置: 首页>>代码示例>>C++>>正文


C++ SmartPointer::IP方法代码示例

本文整理汇总了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;
						
					}
					
				}
//.........这里部分代码省略.........
开发者ID:HalfDemon,项目名称:MCPP,代码行数:101,代码来源:listening_socket.cpp


注:本文中的SmartPointer::IP方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。