質問: androidのsocketでの正常なリソース解放 お世話になります、androidでsocket通信を行なうプログラム(wifi経由)を作成しておりますが、周期的に何度も接続、通信、切断をくりかえしておりますと、ソケットの.connectをするところで以下のエラーが出ます。 java.net.connectexception: failed to connect to /192.168.10.12 (port 50000): connect failed: enobufs (no buffer space available) 周期動作としては、 ソケットの接続後、受信待ち状態はスレッド内でソケットのinputstreamの.read()で行い(読み取ることができるまでブロックされるメソッド)、送信は、別のスレッドを起こしてソケットのoutputstreamでのflush()で送信しています。ある周期的タイミングで切断の手順を踏みます。 エラーの内容からして、切断するメソッド発行時にちゃんとリソースが解放されていない?のではないかと考えます。今、私がソケットを閉じよとする際に発行しているメソッドは以下になります(順同) (1)ソケットのoutputstream.close (2)ソケットのinputstream.close (3)ソケット.close 正常にソケット回りのリソースを解放する手順としてソケットの閉じる方法は間違っていますでしょうか? ちなみに、このエラーが出た後はインターネットへの接続も不可状態になり、端末を再起動しないと復帰しません。 大変困っております、お詳しい方おられましたら、よろしくお願いします。
回答: お役に立てるかどうか分かりませんが、 rfc5802 で、 for the scram-sha-1/scram-sha-1-plus sasl mechanism, servers should announce a hash iteration-count of at least 4096. note that a client implementation may cache clientkey&serverkey (or just saltedpassword) for later reauthentication to the same service, as it is likely that the server is going to advertise the same salt value upon reauthentication. this might be useful for mobile clients where cpu usage is a concern. と書いてあるのを、見つけました。