Your task is to fix the .NET Socket API. This is as unhelpful as an API gets. There are several rules that a user of a Socket must follow. Create an API that proves that they are following all of the rules. Here is the relevant part of the existing unhelpful API:
public class Socket : IDisposable
{
public Socket(SocketInformation socketInformation);
public Socket(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType);
public Socket Accept();
public void Bind(EndPoint localEP);
public void Connect(EndPoint remoteEP);
public void Connect(string host, int port);
public void Dispose();
public void Listen(int backlog);
public int Receive(byte[] buffer);
public int Send(byte[] buffer);
}
Here are the rules as documented in MSDN:
- You cannot use a Socket returned from Accept to accept any additional connections from the connection queue.
- You cannot call Accept, Bind, Connect, Listen, Receive, or Send if the socket has been closed.
- You must call Bind before you can call the Listen method.
- You must call Listen before calling Accept.
- Connect(string host, int port) can only be called if addressFamily is either InterNetwork or InterNetworkV6.
- Connect cannot be called if Listen has been called.
- You have to either call Connect or Accept before Sending and Receiving data.
- If the socket has been previously disconnected, then you cannot use Connect to restore the connection.
You may use as the basis of your proof the concepts that were discussed in previous Q.E.D. articles, including:
Please post responses in the comments, email them to mperry@adventuresinsoftware.com, or post links on your own blog. I will share my solution next week.