private void SendThread(object o) { List <byte[]> workList = new List <byte[]>(10); while (mSendWork) { if (!mSendWork) { break; } if (mClientSocket == null || !mClientSocket.Connected) { continue; } mSendSemaphore.WaitResource(); if (mSendMsgQueue.Empty()) { continue; } mSendMsgQueue.MoveTo(workList); try { for (int k = 0; k < workList.Count; ++k) { var msgObj = workList[k]; if (mSendWork) { mClientSocket.Send(msgObj, msgObj.Length, SocketFlags.None); } } } catch (ObjectDisposedException e) { ReportSocketClosed(ESocketError.ERROR_1, e.Message); break; } catch (Exception e) { ReportSocketClosed(ESocketError.ERROR_2, e.Message); break; } finally { for (int k = 0; k < workList.Count; ++k) { var msgObj = workList[k]; StreamBufferPool.RecycleBuffer(msgObj); } workList.Clear(); } } if (mStatus == SOCKSTAT.CONNECTED) { mStatus = SOCKSTAT.CLOSED; } }
private void SendThread(object o) { List <byte[]> workList = new List <byte[]>(10); while (mSendWork) { if (!mSendWork) { break; } if (mClientSocket == null || !mClientSocket.Connected) { continue; } mSendSemaphore.WaitResource(); if (mSendMsgQueue.Empty()) // 没有消息会倒计时 { continue; } mSendMsgQueue.MoveTo(workList); try { for (int k = 0; k < workList.Count; ++k) { var msgObj = workList[k]; if (mSendWork) { mClientSocket.Send(msgObj, msgObj.Length, SocketFlags.None); } } } catch (ArgumentNullException e) { // 不会发生的错误 需要发送的数据为空 ReportSocketConnected(ESocketError.ERROR_NEW_7, e.Message); break; } catch (ObjectDisposedException e)//socket连接已经被释放掉 { ReportSocketConnected(ESocketError.ERROR_NEW_8, e.Message); break; } catch (SocketException e)// 试图访问套接字时发生错误。 { ReportSocketConnected(ESocketError.ERROR_NEW_9, e.Message); break; } //catch (Exception e) //{ // ReportSocketClosed(ESocketError.ERROR_2, e.Message); // break; //} finally { //for (int k = 0; k < workList.Count; ++k) //{ // var msgObj = workList[k]; // StreamBufferPool.RecycleBuffer(msgObj); //} workList.Clear(); } } if (mStatus == SOCKSTAT.CONNECTED) { mStatus = SOCKSTAT.CLOSED; } }