iocp中GetQueuedCompletionStatus 121 信號燈超時時間已到 (error sem timeout)


報錯 :121 信號燈超時時間已到 (error sem timeout)

現象和 http://bbs.csdn.net/topics/370175898 描述一致

現象:GetQueuedCompletionStatus 返回后,GetLastError = 121 (信號燈超時時間已到),出現這個提示后,服務程序變卡,客戶端不能流暢的接收數據;沒有這個錯誤則客戶端接收流暢。

代碼如下

void App::AnalysisCommand(const boost::system::error_code& error,size_t bytes_recvd)
{
    if(!error && bytes_recvd > 0)
    {
    ........
boost::asio::async_read(socket_, boost::asio::buffer(m_buff, sizeof(MessageHeader)), boost::bind(&App::AnalysisCommand, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); } else { LOG_ERROR<<"socket receive error message:"<< error.value()<<error.message();
} }

 

http://bbs.csdn.net/topics/370175898

https://blogs.msdn.microsoft.com/oldnewthing/20140717-00/?p=483/

http://microsoft.public.win32.programmer.networks.narkive.com/YVjj9q6G/calls-to-getqueuedcompletionstatus-returns-error-netname-deleted-or-error-sem-timeout#post1

http://blog.csdn.net/brook0344/article/details/60479590

根據csdn上那哥們說的,ERROR_SEM_TIMEOUT 每秒收到5000個以上的Accept時出現

 

------解決方案--------------------
我用IOCP做服務器,運行幾天出現的.
我的情況是:使用完成端口模型作服務器,當GetQueuedCompletionStatus的時候
偶爾會出現
ERROR_CONNECTION_ABORTED 由本地系統終止網絡連接
ERROR_SEM_TIMEOUT 信號燈超時時間已到。
樣的錯誤,同時服務器能夠接受連接但是不能write/read數據,除了線程被阻塞意外還有什么可能呢?
請各位大大幫忙提點提點 ..

 

可能引起連接問題的最常見原因有:

•    網絡適配器和交換機端口的雙工級別或傳輸速度設置不匹配。
•    傳輸速率為 10/100 兆比特每秒 (Mbps) 的網絡適配器或交換機無法正常交換。有些自動探測設置不能正確檢測某些網絡適配器的速度。
•    網絡適配器與母板或其他的硬件或軟件組件和驅動程序不兼容。
典型的錯誤信息有:
Error 55:"The specified network resource is no longer available" (ERROR_DEV_NOT_EXIST).
Error 64:"The specified network name is no longer available" (ERROR_NETNAME_DELETED).
Error 121:"The semaphore timeout period has expired" (ERROR_SEM_TIMEOUT).
Error 1231:"The remote network is not reachable by the transport" (ERROR_NETWORK_UNREACHABLE).

http://www.lai18.com/content/1812488.html

 

有人說一般是tcp三次握手失敗導致的,那問題引起的原因就可能有點多,網絡不好,網絡斷開.....

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM