多執行緒啟動多個client與同一server進行連接(目前僅啟動一個子執行緒創建socket),當連接數達到1400左右時,getsockopt開始獲取失敗,錯誤碼是EINVAL,重復多次后出現了段錯誤(不能確定是否是同一個問題)
getsockopt((int)m_nSocket, SOL_SOCKET, SO_ERROR, (char*)&nError, &nErrorLen);
求問是不是Socket出錯,可能是什么錯誤
uj5u.com熱心網友回復:
用ulimit -n 查看一下行程能打開的最大檔案數一般是1024,也就是能連接的socket數不超過這個數,所以想連接更多socket,就要修一些系統設定
具體你可以谷歌百度一下
uj5u.com熱心網友回復:
最大檔案數已經設定過了,連接數目前能到1400左右
uj5u.com熱心網友回復:
根據錯誤提示,你查看一下引數是不是真的非法了,比如nError和nErrorLen的地址是否真的有效,有沒有什么記憶體越界的修改了記憶體地址,再查看一下m_nSocket該socket的狀態是否有效,狀態不對也會造成EINVAL錯誤。看你的描述,出現了段錯誤,估計記憶體越界的可能性比較大。
uj5u.com熱心網友回復:
nError和nErrorLen都是堆疊上的變數,并且沒有使用過,應該不會有問題,而且這個錯誤代碼是重復多次出現的,不像是堆疊記憶體出錯,段錯誤我除錯的時候this指標無效,還不確定是什么問題,也不確定兩者是否有聯系,個人比較趨向于socket狀態不對,還在驗證
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/93068.html
標籤:C++ 語言
下一篇:關于c++的簡單問題
