![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?a65a0e2)
お世話になります、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
正常にソケット回りのリソースを解放する手順としてソケットの閉じる方法は間違っていますでしょうか?
ちなみに、このエラーが出た後はインターネットへの接続も不可状態になり、端末を再起動しないと復帰しません。
大変困っております、お詳しい方おられましたら、よろしくお願いします。
No.2ベストアンサー
- 回答日時:
No.1です。
connectエラー発生時にTIME_WAIT状態のものがないことが確認できたのだったら、
この件とは別の問題なのだと思いますが、この質問をするなら、どれくらいの時間間隔で
繰り返しているかだけでなく、エラーが発生するのがどれくらいの回数を繰り返して
なのか、あるいはどれくらいの時間を繰り返してなのかもちゃんと書いた方がよいと
思います。
1分間隔でconnectしているのだとしたら、1時間繰り返しても60コネクション程度
なので、もし1時間程度で発生するのだったら、メモリ不足になるほどメモリを
消費しているという可能性は低いかもしれません。もちろん1コネクション生成に
あたってアプリが膨大なメモリを使っていて、それがうまく解放されてないのでしたら
メモリ不足になる場合もあると思います。そうであればメモリ使用量を監視すれば
なにかわかると思います。
また、繰り返し周期を2倍遅くしたら、エラーが発生し始める時間も2倍遅くなるのか、
それとも回数に依らず一定時間でエラーが発生し始めるのかを試してみると、
エラー発生要因を探る手がかりになると思います。
あと、ソケット切断後にwifiを切断しているというのも何のためにどのようにしている
のかよくわかりませんでした。
これってwifiの設定をあなたのアプリが勝手にOFFにするということなのでしょうか?
なぜアプリが勝手にwifiの設定をOFFにするのかよくわからなかったので、じゃあwifiを
切断しなかったらどうなるのかというのも試してみた方がよいと思いました。
ご回答ありがとうございます。いろいろやってみましたが、瞑想しています。。エラーが起こるのは、1分間隔で1000~2000回動作させた場合に起こることが多いです、が、イメージとしては毎回同じタイミングで出ているという感覚ではないです。WifiのOFF/ON(Wifimanager#enabled(true/false))はシステムの都合上、3G回線につないで、インターネットに接続するためです。ソケット接続は自作wifi機器のAPに対して行いますが、そのAPの先にはインターネットはいないため、このような動作をさせています。なので、実際にはwifiON→APに接続→ソケット接続→ソケットで通信→ソケット切断→WifiOFFを繰り返しています。また、ご指摘いただいたようにWifiをつないだままの状態で、ソケット接続・通信・切断をくりかえしてみましたところ、5000回以上エラーはでませんでした。
No.3
- 回答日時:
お役に立てるかどうか分かりませんが、
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.
と書いてあるのを、見つけました。
No.1
- 回答日時:
TCP/IPプロトコルでは、切断を開始した側は切断手順の最後に必ず
タイムアウト待ち(TIME_WAIT状態)になることをご存知ですか?
http://www.atmarkit.co.jp/ait/articles/0402/13/n …
の「TCPの状態遷移図」を参照してください。
これは、OutputStreamだけを先に閉じるハーフ・クローズ手順でも同じです。
http://www.geocities.jp/taka_owl2005/job/UNIX/ne …
も参考にしてください。
このTIME_WAIT時間はシステムによってデフォルト値が異なりますが、
Windowsで240秒、CentOSで60秒です。Androidがどうなっているか知りませんが
おそらくLinux系で60秒くらいだと思います。
コネクションの接続/切断周期がこれより短いのであれば、TIME_WAIT状態の
コネクションがどんどん増えて行き、確実にリソース不足になります。
このTIME_WAIT時間の設定を自分の接続/切断周期以下にすればリソース不足は
解消されると思いますが、この値はネットワーク状態に応じて決めるべきもの
であり、アプリの都合で変えるべきものではありません。
根本的には、頻繁な接続/切断の繰り返しを避けるよう設計する必要があります。
この回答への補足
丁寧なご回答ありがとうございます。
私のほうでもTIME_WAITについて疑ってみましたが、おっしゃるとおりandroidのタイムウエイトは60秒であるようでした。(実際にnetstatというアプリで監視してみますと、TIME_WAIT状態になったものは60秒後に消えました)
私の作っているシステムは60秒周期で1つのソケットをandroid端末側から接続して、双方通信して、android端末側から切断するという動作を行なっております。ちなみにWifiの通信の切断も
ソケット切断の3秒後に実施しています。
60秒周期で動作を繰り返しておりますので、TIME_WAIT状態のものがたくさん生成されている状態は考えにくい+実際にENOBUFSが起こっている状態でnetstatアプリで確認したところ、TIME_WAITがたくさんある状態ではありません(むしろLISTENなプロセスが1つあるだけ、のような状態です)
他に疑わしい事柄はありますでしょうか?
ソケットプロセスがTIME_WAITにある状態でWifiを切断するのがまずい?とかあるのでしょうか・・・。
>No.1様 またがってすみません。wifiを切断しなければ問題なく動作しました。wifiのON/OFFのみを十分に繰り返したのち、ソケット接続を実施しますと問題なく接続できました。具体的な実装に問題があるのでしょうか?wifiは毎回接続したいSSIDの接続履歴を削除し,WifiConfigrationで新たにnetidを取得して接続します。socketはsocket.connect(,)で接続した後、InputStream(inとします)・OutputStream(outとします)を取得し、in.read(byte[])を∞ループで実施し、受信状態を常に保ちます。outはout.wite,out.flushで送信します。通信データは10byte程度です。そして、ある周期タイミングが来た時点で out.close in.close socket.close の順にクローズしていきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- バイク車検・修理・メンテナンス シガーソケットの電圧が安定しない 8 2022/12/15 22:13
- CPU・メモリ・マザーボード LGA 1700のソケットのピンなのですが インテルのソケットをほとんど見たことがなくて 判断できな 1 2023/04/03 15:07
- CPU・メモリ・マザーボード LGA 1700のソケットのピンなのですが インテルのソケットをほとんど見たことがなくて 判断できな 3 2023/04/11 12:00
- Wi-Fi・無線LAN PCWi-Fiの設定方法がわからなくて困っています。 4 2022/12/28 18:30
- 車検・修理・メンテナンス シガーソケットが通電しなくなりヒューズを替えても直りません。原因は何ですか? 10 2022/09/22 11:03
- 車検・修理・メンテナンス シガーソケットおかしいみたい 6 2022/11/28 19:10
- 英語 This paper focuses on the literature relevant to t 2 2022/12/02 09:41
- 国産車 トヨタROOMYカスタムGT 前期型の車幅灯を交換したいのですが、ソケットの位置と、外し方を教えてく 1 2022/11/05 07:15
- その他(車) パイオニアのカーナビAVIC-MRP006のシガーソケットについて 3 2023/05/22 09:27
- 洗濯機・乾燥機 パナソニック ドラム式洗濯機 ギヤードモーター交換について 5 2022/05/22 00:24
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで#N/Aを含めた平均値...
-
循環参照にならない方法があっ...
-
androidのSocketでの正常なリソ...
-
コンパイルエラーと実行時エラ...
-
ドメインに参加しようとするとD...
-
MACアドレス 00:E0:C3 SAKAI って
-
自分のルータから攻撃される z...
-
【組み込み】HEWのビルドエラー
-
マクロでのエラーについて
-
ワイヤーボンディングのスパー...
-
BASIC認証エラー時の表示HTML指定
-
/var/log/messagesエラー出力
-
アンドロイドスタジオ 構成が間...
-
「内部サーバーエラー サーバー...
-
Access2007からADO接続にてEXCEL
-
「キャスフィ」に入れない
-
リモートデスクトップ接続でパ...
-
エラーメールで"too many hops"...
-
プロキシサーバとDNSサーバにつ...
-
同一のホスト名で何か問題があ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
循環参照にならない方法があっ...
-
エクセルで#N/Aを含めた平均値...
-
MACアドレス 00:E0:C3 SAKAI って
-
応答を解析できません
-
エクセルVBA 関数エラー箇所を...
-
ドメインに参加しようとするとD...
-
クライアントが切断されました。
-
エクセル #N/Aを印刷時に表示...
-
【QnapNAS】不良HDDと診断され...
-
アウトルックで送信時に「名前...
-
検索をかけた時、ページを開け...
-
WSUSインストール時に設定ウィ...
-
「内部サーバーエラー サーバー...
-
vsftpd 大量転送で時たま途中で...
-
ヤフーオークションアプリが開...
-
AndroidStudioでエラーが出て解...
-
cpコマンドを行うとファイルサ...
-
マクロでのエラーについて
-
android studioエラー
-
ロイロノートのエラーについて ...
おすすめ情報