14/06/07 16:35:42.74 ZfdboDuT
>>743
>サーバとクライアントでcloseするタイミングを同期する方法はありますでしょうか?
クライアントとサーバ上のアプリケーション間通信について、
以下のケースに応じて通信の終了に関する規約(プロトコル)を決める
(1) データ送信が必ず一方向のケース(例:パイプ)
送信側は任意にcloseできるが、受信側ではソケットからの
終了通知(データ長=0)を待ってからcloseしなければならない
(2) 要求/応答のペアからなるトランザクションが常に同一側で発生するケース(例:HTTP/FTP/SMTP)
要求メッセージ送信側は任意にcloseできるが、応答メッセージ送信側では
ソケットからの終了通知(データ長=0)を待ってからcloseしなければならない
(3) データ送信要求が任意の時点かつ双方の側で発生するケース
制御メッセージとして通信終了要求(例:"QUIT")と通信終了応答(例:"OK")を定義し、
正常に通信を終了させたい時は終了要求メッセージを送信し応答を待つ
要求を受信した終了受け入れ側では応答メッセージを送信して即座にソケットをcloseする
終了要求側では応答メッセージ受信を確認してからソケットをcloseする
(3)のケースは複雑な手順を踏まなければならないのだから、連動テストで問題が発生してから
解決策を悩むのではなく、上流の設計工程でアプリケーション間通信プロトコルの全体を
ステートマシンとして形式的に定義し、正当性を検証しておくことが望ましい