C# 异步套接字和清理资源

C# 异步套接字和清理资源,c#,sockets,C#,Sockets,如果我接到一个电话 listener.BeginAcceptSocket(cbConnect, listener); 和我的回调方法: private void cbConnect(IAsyncResult ar) { TcpListener listener = (TcpListener)ar.AsyncState; MyObj myObj = new MyObj(); myObj.socket = new Socket(AddressFamily.InterNetw

如果我接到一个电话

listener.BeginAcceptSocket(cbConnect, listener);
和我的回调方法:

private void cbConnect(IAsyncResult ar)
{
    TcpListener listener = (TcpListener)ar.AsyncState;
    MyObj myObj = new MyObj();
    myObj.socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    myObj.socket = listener.EndAcceptSocket(ar);
    listener.BeginAcceptSocket(cbConnect, listener);//start listening again
    myObj.socket.BeginReceive(myObj.buffer, 0, myObj.buffer.Length, 0, cbReceive, myObj);
}
以下是MyObj课程:

Public class MyObj
{
    public Socket socket;
    public byte[] buffer = new byte[1080];
} 
我的问题是,如果连接另一端的客户端从未发送任何数据,那么myObj会怎么样?
如何关闭套接字并清理资源

如果远程连接断开,套接字应通过垃圾收集器自行清理。

如果连接未断开但未发送数据,GC是否会清理myObj?否。如果要设置一些空闲超时,则需要设置关闭套接字的计时器。您可能希望建立一个协议,以便可以向另一端发送空闲超时通知,以便它知道连接断开的原因。一旦关闭了套接字,异步接收将停止,MyObjv的引用将退出,GC将在下一次传递时收集所有这些信息(假设没有其他的引用)。谢谢您的建议。您也可以考虑使用UDP,因为它不会维护连接和资源。