SocketState TcpServer::Listen(const IpAddress& address, unsigned int queueSize) { NazaraAssert(address.IsValid(), "Invalid address"); Open(address.GetProtocol()); SocketState state = SocketImpl::Listen(m_handle, address, queueSize, &m_lastError); if (state == SocketState_Bound) m_boundAddress = SocketImpl::QuerySocketAddress(m_handle); UpdateState(state); return state; }
bool UdpSocket::Send(const IpAddress& to, const void* buffer, std::size_t size, std::size_t* sent) { NazaraAssert(to.IsValid(), "Invalid ip address"); NazaraAssert(to.GetProtocol() == m_protocol, "IP Address has a different protocol than the socket"); NazaraAssert(buffer && size > 0, "Invalid buffer"); int byteSent; if (!SocketImpl::SendTo(m_handle, buffer, static_cast<int>(size), to, &byteSent, &m_lastError)) return false; if (sent) *sent = byteSent; return true; }
/*! * \brief Sends multiple buffers as one datagram * \return true If data were sent * * \param to Destination IpAddress (must match socket protocol) * \param buffers A pointer to an array of NetBuffer containing buffers and size data * \param size Number of NetBuffer to send * \param sent Optional argument to get the number of bytes sent */ bool UdpSocket::SendMultiple(const IpAddress& to, const NetBuffer* buffers, std::size_t bufferCount, std::size_t* sent) { NazaraAssert(to.IsValid(), "Invalid ip address"); NazaraAssert(to.GetProtocol() == m_protocol, "IP Address has a different protocol than the socket"); NazaraAssert(buffers && bufferCount > 0, "Invalid buffer"); int byteSent; if (!SocketImpl::SendMultiple(m_handle, buffers, bufferCount, to, &byteSent, &m_lastError)) return false; if (sent) *sent = byteSent; return true; }
SocketState TcpClient::Connect(const IpAddress& remoteAddress) { NazaraAssert(remoteAddress.IsValid(), "Invalid remote address"); NazaraAssert(remoteAddress.GetPort() != 0, "Remote address has no port"); Disconnect(); Open(remoteAddress.GetProtocol()); CallOnExit restoreBlocking; if (m_isBlockingEnabled) { SocketImpl::SetBlocking(m_handle, false); restoreBlocking.Reset([this] () { SocketImpl::SetBlocking(m_handle, true); }); } SocketState state = SocketImpl::Connect(m_handle, remoteAddress, &m_lastError); m_peerAddress = (state != SocketState_NotConnected) ? remoteAddress : IpAddress::Invalid; UpdateState(state); return state; }