public void Start()
{
logger.DebugFormat("Starting to listen on {0}", endpointToListenTo);
while (endpointToListenTo.Port < 65536)
{
try
{
TryStart(endpointToListenTo);
logger.DebugFormat("Now listen on {0}", endpointToListenTo);
return;
}
catch(SocketException ex)
{
if (enableEndpointPortAutoSelection &&
ex.Message == "Only one usage of each socket address (protocol/network address/port) is normally permitted")
{
endpointToListenTo.Port = SelectAvailablePort();
logger.DebugFormat("Port in use, new enpoint selected: {0}", endpointToListenTo);
}
else
throw;
}
}
}
public void CanHandleClientSendingBadLengthOfData() { using (var reciever = new Receiver(endpointToListenTo, messages => null)) { reciever.CompletedRecievingMessages += () => wait.Set(); reciever.Start(); using (var client = new TcpClient()) { client.Connect(endpointToListenTo); var stream = client.GetStream(); stream.Write(BitConverter.GetBytes(16), 0, 4); stream.Write(BitConverter.GetBytes(5), 0, 4); } wait.WaitOne(); var warn = (from e in appender.GetEvents() where e.Level == Level.Warn && e.RenderedMessage.StartsWith("Unable to read message data") select e).FirstOrDefault(); Assert.NotNull(warn); } }