<< 2024/03 >> | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
|
PMailServer2 での iPhone mail のタイムアウトについて
18/07/17 01:34 / PMailServer2
過去にもお問い合わせがあり、最近またお問い合わせがありましたので、きっちりと調査を行いました。
まず、本件の問題ですが、iPhone mail (iOS 標準メール)を使って、POP3 や IMAP4 でアクセスを行った際に、サーバー側でタイムアウトが記録される件です。 結論からして、90% くらいの確率で iPhone mail 側の問題だと思われます。 テストで利用した iOS は 1) iPhone4 7.1.2 (11D257) 2) iPhone7 11.4 (15F79) です。 回線は Wi-Fi と一般的なプロバイダ経由の2パターンです。 サーバー側で、IMAP4 のタイムアウトは300秒(5分)に設定されています。 03:00:47 8 UID SEARCH UID 1:* UNSEEN 03:00:47 8 OK UID SEARCH Completed 03:00:47 9 UID SEARCH 1:* DELETED 03:00:47 9 OK UID SEARCH Completed 03:05:49 Client Timeout(4) 上記は一番発生する確率の高い箇所です。 このような場合、考えられるパターンはいくつかあるのですが、まず第一にパケットロスが発生して、PMailServer2 側が iPhone mail からのパケットを取りこぼしているパターンがあります。 ISP 経由の場合、途中の経路やネットワークの状況等で発生しなくもないのですが、Wi-Fi 経由でも発生する為、考えにくいです。(無論、1度発生したから取りこぼしたなんてことは無く、数日間の間テストした結果です) 次に POP3 や IMAP4 のコマンドは改行コードでコマンドの終端を示しますので、その箇所を取りこぼしている、つまり iPhone mail 側は、コマンドを送っているがコマンドの終端を認識出来ない為に、タイムアウトになっている。という可能性がありますので、デバッグ用コードを組み込んで確認しましたが、少なくとも 1byte も送られてきていませんでした。 次に上記の箇所で高確率で発生する(タイムアウトが頻繁に発生するのでは無く、タイムアウトが発生する場合に、上記の箇所で発生する確率が高いという意味です。タイムアウト自体が頻繁に発生する訳ではありません)ので、特定のパケット状況で発生するのでは無いかと思い、ルーター側で DFビットを強制OFF (いわゆる Path MTU Discovery Blackhole 問題対策)を設定してみましたが、状況は変わりません。 次に視点を変えて、その前のサーバー側の応答が送信に失敗している可能性も考えましたが、そもそも送信に失敗した場合は、その旨のエラーが出ますので、これも無いです。 (Winsock レベルではエラーが出ていないという意味で、TCP/IP スタックに問題があって、エラーが検知出来ない可能性も0ではありませんが、Intel NIC でそういう問題は聞いたことが無いです。致命的な問題ですし) ということで 1)NIC レベルは問題無いだろう。 2)Path MTU Discovery 問題の無い。 3)送信にも失敗していない。 4)パケロスの可能性も非常に低い。 となると、結果的には、iPhone mail 側が次のコマンドを「送ったつもりで送れていない」「そもそも送っていない」 しか考えられないんですよねぇ。 で、正常に動いているパターンなんですが 01:41:16 14 UID SEARCH 1:* DELETED 01:41:16 14 OK UID SEARCH Completed 01:41:37 15 LOGOUT 01:41:37 * BYE IMAP4rev1 Server logging out 01:41:37 15 OK logout Complated. タイムアウトになるのが、次に LOGOUT コマンドで終了する直前に発生しているようです。 (POP3 の場合は、QUIT です) 上記の事から、iPhone mail のセッション終了処理に問題があり(*1)それが原因でタイムアウトが発生しているという結論になります。 PMailServer2 側ではどうにもなりませんので、今後お問い合わせを頂いても、対処できませんのでご了承願います。 検索してみると、どうやら10年近く前から同様の問題が出ているようですが、Apple は直す気が無いようです。 困ったもんですなぁ。 (*1) iPhone mail の中身までは当然わかりませんが、なんとなく予想すると、Socket通信で切断(CloseSocket)する前に Shutdown という API で該当ソケットの送信のみを禁止、受信を禁止、両方禁止という処理を行うことができます。 同期処理の場合は問題でませんが、非同期処理の場合、これが前後する場合があります。 つまり、 LOGOUT 送信>応答を待つ>Shutdown>CloseSocket という順番になりますが、これが Shutdown>LOGOUT送信>応答を待つ。という処理になると、最初の Shutdown でソケット通信自体はできなくなるので、LOGOUT も送れないし送信エラー処理が正しくされていない場合、送ったつもりになって、サーバーからの応答を待つ。当然サーバーは受信していないので応答しないし、CloseSocket も行われない。結果としてサーバー側でタイムアウトになるしか無い。というような気がしないでもありません。 [更新日付:2018/07/17 01:34:02]
トラックバックを見る(0) Log Link [https://akisoftware.com/cgi-bin/blom.exe?akisoft+sl+9fb220a0e5502557bfddf91683deb9e53c295852] TB Link [https://akisoftware.com/cgi-bin/blom.exe?akisoft+tb+9fb220a0e5502557bfddf91683deb9e53c295852] 記事へのコメント コメントはありません |
@AKISoftOfficialをフォロー
掲示板 サポートBBS PMailServer BBS アクセスの多い記事
最新記事(カテゴリ別)
フリー版からの製品版移行時の MTA 並列数について
02/17 23:52 メールサーバーの開発を始めて20年 02/07 21:46 PMailServer2 Version 2.52a をリリースしました。 12/26 14:02 PMailServer2 Version 2.52 をリリースしました。 10/01 10:48 PMailServer2 Version 2.51b をリリースしました。 09/19 01:43 PMailServer2 Version 2.51b(仮) Memo 09/12 00:33 PMailServer2 Version 2.51a をリリース、及び脆弱性についてのお知らせ 09/05 01:15 PMailServer2 Version 2.51a Memo 08/21 00:48 アドレスV125(K5)のスターターリレーの交換 08/04 10:10 SanDisk ポータブルSSDを買ってみました。 08/04 09:41 最新コメント
コメントはありません
UUアクセス数
今日は 277回
昨日は 159回 トータル 300994回 3ヶ月記事別ランキング
プロフィール
Z80から68系、8086系を経由して
Pascalに移行。現在は Delphiをメインに C/C#も囓ってみたり。 「無い物は作れ」の精神で年がら年中なにかを作っています。 すぐ自前で作りたがるので無駄に工数が上がったりして自爆してみたりもします。 好きな物は麺類とお煎餅 Blom内検索
BLOM Version 1.39 ©2007-15 A.K.I Software all rights reserved. |