Todo List

Page Implementing a kNet Server
Describe non-stealth mode.

Namespace kNet

Omit this.

Investigate the inclusion chain of these two files. Is this include necessary?

File kNet.h
Remove this in favor of pimpl.

Member kNet::Array< T, AllocT >::clear ()
Placement new/delete instead of this crap.

Member kNet::Array< T, AllocT >::erase (size_t i)
Placement new/delete instead of this crap.

Member kNet::Array< T, AllocT >::erase (int start, int end)
Placement new/delete instead of this crap.

Member kNet::Array< T, AllocT >::pop_back ()
Placement new/delete instead of this crap.

Member kNet::Clock::Day ()
.

Member kNet::Clock::Hour ()
.

Member kNet::Clock::Min ()
.

Member kNet::Clock::Month ()
.

Member kNet::Clock::Sec ()
.

Member kNet::Clock::Year ()
.

Member kNet::DataSerializer::AddVLE (u32 value)
To support other than 1/2/4-byte VLE's, convert to using AddBits().

Member kNet::DataSerializer::DataSerializer (size_t maxBytes_=128 *1024)
Support dynamic resizing.

Member kNet::DataSerializer::DataSerializer (size_t maxBytes_, const SerializedMessageDesc *msgTemplate)
Support dynamic resizing.

Member kNet::DataSerializer::SkipNumBytes (size_t numBytes)
Check out-of-bounds.

Member kNet::EndPoint::FromSockAddrIn (const sockaddr_in &addr)
Not IPv6-capable.

Member kNet::EndPoint::ip [4]
Not IPv6-capable.

Member kNet::EndPoint::IPToString () const
Not IPv6-capable.

Member kNet::EndPoint::operator< (const EndPoint &rhs) const
Not IPv6-capable.

Member kNet::EndPoint::ToSockAddrIn () const
Not IPv6-capable.

Member kNet::EndPoint::ToString () const
Not IPv6-capable.

Member kNet::Event::Create (EventWaitType type)

Remove these, just a bit of immediate-mode testing here.

Return success or failure.

Member kNet::MessageConnection::Disconnect (int maxMSecsToWait=500)
Instead of waiting multiple 1msec slices, should wait for proper event.

Member kNet::MessageConnection::EndAndQueueMessage (NetworkMessage *msg, size_t numBytes=(size_t)(-1), bool internalQueue=false)

We can optimize here by doing the splitting at datagram creation time to create optimally sized datagrams, but it is quite more complicated, so left for later.

Check this is ok.

Convert to atomic increment, or this is a race condition.

Convert to atomic increment, or this is a race condition.

Is it possible to check beforehand if this criteria is avoided, or if we are doomed?

Member kNet::MessageConnection::HandleInboundMessage (packet_id_t packetID, const char *data, size_t numBytes)

Check that there actually is enough space to read.

Should kill/Close the connection right here and now?

Member kNet::MessageConnection::outboundQueue
Make the choice of which of the following structures to use a runtime option.

Member kNet::MessageConnection::Process (int maxMessagesToProcess=100)
This will block, since it is called with the default time period.

Member kNet::MessageConnection::RunModalClient ()
WSACreateEvent/WSAWaitForMultipleEvents for improved responsiveness and performance.

Member kNet::MessageConnection::SetMaximumDataSendRate (int numBytesPerSec, int numDatagramsPerSec)
Implement.

Member kNet::MessageConnection::SplitAndQueueMessage (NetworkMessage *message, bool internalQueue, size_t maxFragmentSize)

Would like to do this: FragmentedSendManager::FragmentedTransfer *transfer; { Lock<FragmentedSendManager> sends = fragmentedSends.Acquire(); transfer = sends->AllocateNewFragmentedTransfer(); }

Convert to atomic increment, or this is a race condition.

Is it possible to check beforehand if this criteria is avoided, or if we are doomed?

Member kNet::MessageConnection::WaitForMessage (int maxMSecsToWait)

Log out warning if this takes AGES. Or rather, perhaps remove support for this altogether to avoid deadlocks.

Instead of waiting multiple 1msec slices, should wait for proper event.

Instead of waiting multiple 1msec slices, should wait for proper event.

Member kNet::MessageConnection::WaitToEstablishConnection (int maxMSecsToWait=500)
Instead of waiting multiple 1msec slices, should wait for proper event.

Member kNet::Network::ConnectSocket (const char *address, unsigned short port, SocketTransportLayer transport)

Check return value.

Check return value.

Member kNet::Network::StopServer ()
This is a forceful stop. Perhaps have a benign teardown as well?

Member kNet::NetworkMessage::GetTotalDatagramPackedSize () const

This is loose, but since it only needs to be an upper bound, it is safe now.

Take into account the inOrder field.

Member kNet::NetworkServer::Close (int disconnectWaitMilliseconds)
Re-implement this function to remove the monolithic Sleep here. Instead of this, wait for the individual connections to finish.

Member kNet::NetworkServer::ReadUDPSocketData (Socket *listenSocket)

Omit this conversion for performance.

HashTable for performance.

Member kNet::NetworkServer::RunModalServer ()

Loop until StopModalServer() is called.

WSACreateEvent/WSAWaitForMultipleEvents for improved responsiveness and performance.

Member kNet::NetworkServer::ToString () const
Add note about stealth mode.

Member kNet::New (Allocator *allocator, size_t alignment, const char *nameTag=0, AllocFlags flags=AFAllocLow)
Currently bad_alloc exceptions are not meant to be supported (although they can occur). Define this behavior more precisely?

Member kNet::NewArray (size_t numObjects, Allocator *allocator, size_t alignment, const char *nameTag=0, AllocFlags flags=AFAllocLow)

The 4 bytes of size data are unnecessary for PODs!

Proper alignment.

Proper alignment.

Member kNet::PrintLocalIP ()
inet_ntoa is deprecated! doesn't handle IPv6!

Member kNet::Socket::BeginSend ()
In debug mode - track this pointer.

Member kNet::Socket::Receive (char *dst, size_t maxBytes, EndPoint *endPoint=0)
Mark UDP server and client sockets separately. For a server socket, we cannot Close() here, but for client sockets it is safe.

Member kNet::Socket::Send (const char *data, size_t numBytes)

Member kNet::StdCAlloc::Alloc (StdCAlloc *, size_t size, size_t alignment, const char *=0, AllocFlags=AFAllocLow)
aligned_malloc on unix?

Member kNet::StdCAlloc::Size (StdCAlloc *, void *ptr)
Perhaps support Resize(void *ptr, size_t newSize); ?

File UDPMessageConnection.cpp
Flow control currently disabled since testing out the performance of UDT.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines