まだ困ってます・・・
client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 2000);
で受信タイムアウト設定したつもりで居たら駄目だった。

SocketOptionName 列挙体
ReceiveTimeout タイムアウトを受信します。
このオプションは、同期メソッドにだけ適用されます。BeginSend などの非同期メソッドに対しては機能しません。

AsyncCallback(ReceiveCallback)で非同期受信したい場合ではどうすればいいですか?