こんにちは。いつも拝見させていただいています。
Windowsソケットのエラーについて質問させていただきます。
Winsoc2のsend(),connect()メソッド(ブロッキングモードです)にて
プログラム稼動から7日間後位にERROR=10055:WSAENOBUFSが発生します。
意味は、「システムのバッファ領域が不足しているか、またはキューが一杯なため、ソ
ケット操作を実行できませんでした。」と言うもののようです。
環境は、
Windows XP(SP1 ,SP2)
Winsock2使用
MFC 7.1で開発
実装メモリ:512KB
ソケットはプログラム内で2つ作成し、TCP/IPとUDPを同時に使用しています。
エラーが発生するのはTCP/IPソケットで、UDPは動作しています。
質問は2つあります
1.この時のシステムバッファとは何処を指すのでしょうか?
タスクマネージャやパフォーマンスで確認できるものなのでしょうか?
2.非ブロッキングにすれば発生しない?
非ブロッキングモードにすれば10055のエラーは発生しないでしょうか?
(現在確認中)
それでもシステムバッファ不足問題は潜んでいるように思えます。
以上、宜しくお願いいたします。
KBに該当しそうな項目がありました。
KB196271 : 5000 を超える番号の TCP ポートから接続しようとすると 'WSAENOBUFS
(10055)' エラーが表示される
http://support.microsoft.com/kb/196271/ja
これが原因かどうかわかりませんが
該当するようでしたら対策が必要かと。
@はsetsockoptでSO_SNDBUFを適切な値に設定すれば直るかもしれませんね。