diff --git a/Apewer/Network/Extension.cs b/Apewer/Network/Extensions.cs
similarity index 89%
rename from Apewer/Network/Extension.cs
rename to Apewer/Network/Extensions.cs
index f023ec5..61a3c04 100644
--- a/Apewer/Network/Extension.cs
+++ b/Apewer/Network/Extensions.cs
@@ -9,7 +9,7 @@ namespace Apewer.Network
{
/// 扩展方法。
- public static class Extension
+ public static class Extensions
{
/// 添加邮件账户。
@@ -155,15 +155,31 @@ namespace Apewer.Network
return json;
}
+ /// 检查 Socket 在线状态。
+ ///
+ ///
+ ///
+ public static bool Online(this Socket socket)
+ {
+ if (socket == null) return false;
+
+ var pending = socket.Poll(1000, System.Net.Sockets.SelectMode.SelectRead);
+ var available = socket.Available;
+ var offline = pending && available == 0;
+ return !offline;
+ }
+
/// 从套接字接收数据。
///
///
+ ///
///
///
///
public static byte[] Receive(this Socket socket, int maxLength = 1024)
{
if (socket == null) throw new ArgumentNullException(nameof(socket));
+ if (maxLength < 0 || maxLength > 65535) throw new ArgumentOutOfRangeException(nameof(maxLength));
var buffer = new byte[maxLength];
var received = socket.Receive(buffer, 0, maxLength, SocketFlags.None);
diff --git a/Apewer/Network/TcpClient.cs b/Apewer/Network/TcpClient.cs
index 2aaacbe..425f722 100644
--- a/Apewer/Network/TcpClient.cs
+++ b/Apewer/Network/TcpClient.cs
@@ -14,15 +14,15 @@ namespace Apewer.Network
/// 套接字实例。
public Socket Socket { get => _socket; }
+ /// 在线。
+ public bool Online { get => Extensions.Online(_socket); }
+
/// 本地终结点。
public IPEndPoint LocalEndPoint { get; private set; }
/// 远程终结点。
public IPEndPoint RemoteEndPoint { get; private set; }
- /// 已连接。
- public bool Connected { get => _socket != null && _socket.Connected; }
-
/// 启动客户端,并连接到服务端。
public TcpClient(string ip, int port) : this(IPAddress.Parse(ip), port) { }
@@ -49,9 +49,6 @@ namespace Apewer.Network
#endif
}
- /// 在线。
- public bool Online { get => Extensions.Online(_socket); }
-
/// 接收。
///
///