Beispiel #1
0
//==============================================================================
std::shared_ptr<Socket> SocketImpl::Accept() const noexcept
{
    auto ret = std::make_shared<SocketImpl>(m_protocol, m_spConfig);

    struct sockaddr_in socketAddress;
    auto *pSocketAddress = reinterpret_cast<sockaddr *>(&socketAddress);
    socklen_t socketAddressLength = sizeof(socketAddress);

    socket_type skt =
        ::accept(m_socketHandle, pSocketAddress, &socketAddressLength);

    if (skt == InvalidSocket())
    {
        SLOGS(m_socketHandle, "Error accepting");
        ret.reset();
    }
    else
    {
        SLOGD(
            m_socketHandle,
            "Accepted new socket: %d (%d)",
            ret->GetSocketId(),
            skt);

        ret->m_socketHandle = skt;
        ret->m_clientIp = ntohl(socketAddress.sin_addr.s_addr);
        ret->m_clientPort = ntohs(socketAddress.sin_port);
        ret->m_aConnectedState.store(ConnectedState::Connected);
    }

    return ret;
}
Beispiel #2
0
void CNetSock::CloseSocket()
{
	if (INVALID_SOCKET != m_s)
	{
		closesocket(m_s);
		InvalidSocket();
	}
}
Beispiel #3
0
//==============================================================================
void SocketImpl::Close() noexcept
{
    if (IsValid())
    {
        ::close(m_socketHandle);
        m_socketHandle = InvalidSocket();
    }
}
Beispiel #4
0
		void Socket::close(){
			if(::shutdown(_socket, 2) == -1){
				switch(errno){
					case EBADF:
						throw InvalidFileDescriptor(_socket);
						break;
					case ENOTSOCK:
						throw InvalidSocket(_socket);
						break;
					case ENOTCONN:
						//Lets say you can close it again.
						break;
					default:
						throw NetworkException(errno);
				}
			}
		}
Beispiel #5
0
void CNetSock::Init()
{
	InvalidSocket();
	memset(&m_sa,0,sizeof(m_sa));
	CloseSocket();
}