socket poll java_Socket.Poll()中的ObjectDisposedException c#

我试图在 生产环境 中使用一段时间的套接字库中发现奇怪的行为 .

实际上,接收和发送是使用BeginReceive / EndReceive和BeginSend / EndSend调用处理的,因此所有内容都以异步方式处理 .

此外,我有一个MonitorThread,它每秒轮询套接字的状态:

void ControlThreadCallback()

{

if (!IsConnected && m_ConnectionIP != null && !m_ConnectionIP.Equals(String.Empty) && m_ConnectionPort > 0)

{

//No connected, perform reconnection, recreate serversocket or dispose client socket if needed

}

}

IsConnected属性在同一个类中定义:

public bool IsConnected

{

get

{

try

{

return m_Socket != null && m_Socket.Connected &&

!(m_Socket.Poll(1, SelectMode.SelectRead) && m_Socket.Available == 0);

}

catch (Exception ex)

{

//Log error

//Object Disposed exception is being catched here sometimes

return false;

}

}

}

有时,会捕获objectdisposedexception,因此将false返回给IsConnected属性,而ControlThread认为socket未连接 . 但是,我在套接字中活动,所以根本没有断开连接 .

只有在套接字上发送和接收大量数据时(即每秒大于20条消息)才会发生这种情况 .

在哪些奇怪的情况下,Socket.Poll给出了objectDisposedException?并且,可能是socket之间的一些竞争条件.Poll && socket.Available?

如果您需要更多代码,我可以粘贴更多代码段 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值