Q: C# Socket Events Is it possible to create an event handler that triggers when a socket receives new data, similar to the
*_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
method that is available with serial ports?

A: Yes.
Have a look at SuperSimpleTcp.
It might even do what you want out of the box.
void Main(string[] args)
{
  // instantiate
  SimpleTcpServer server = new SimpleTcpServer("127.0.0.1:9000");

  // set events
  server.Events.ClientConnected += ClientConnected;
  server.Events.ClientDisconnected += ClientDisconnected;
  server.Events.DataReceived += DataReceived;

  // let's go!
  server.Start();

  // once a client has connected...
  server.Send("[ClientIp:Port]", "Hello, world!");
  Console.ReadKey();
}

static void ClientConnected(object sender, ClientConnectedEventArgs e)
{
  Console.WriteLine("[" + e.IpPort + "] client connected");
}

static void ClientDisconnected(object sender, ClientDisconnectedEventArgs e)
{
  Console.WriteLine("[" + e.IpPort + "] client disconnected: " + e.Reason.ToString());
}

static void DataReceived(object sender, DataReceivedEventArgs e)
{
  Console.WriteLine("[" + e.IpPort + "]: " + 
     Encoding.UTF8.GetString(e.Data));
}

