int DoSend(byte[] dgram, int bytes, IPEndPoint endPoint)
{
/* Catch EACCES and turn on SO_BROADCAST then,
* as UDP sockets don't have it set by default
*/
try
{
if (endPoint == null)
{
return (socket.Send(dgram, 0, bytes,
SocketFlags.None));
}
else
{
return (socket.SendTo(dgram, 0, bytes,
SocketFlags.None,
endPoint));
}
}
catch (SocketException ex)
{
if (ex.ErrorCode == (int)SocketError.AccessDenied)
{
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
if (endPoint == null)
{
return (socket.Send(dgram, 0, bytes, SocketFlags.None));
}
else
{
return (socket.SendTo(dgram, 0, bytes, SocketFlags.None, endPoint));
}
}
else
{
throw;
}
}
}