Winsockコマンドのrecvで、応答を全て受け取らない

解決


Plum  2005-02-02 02:12:18  No: 56246

メールサーバへの認証を行うプログラムを作っています。
sendでユーザ名を指定し、recvで結果を受け取っています。

struct timeval  timeout = {0, 0};    // タイムアウト値格納
fd_set    fds;
  
FD_ZERO(&fds);
FD_SET(m_Socket, &fds);

// 返答を受け取る
for ( int i = 0; i < dwRecvSize - 1; i++ )
{
   recv( socket, &szRecv[i], 1, 0 );

   // 読めなくなったら終了
   if( select( m_socket+ 1 , &fds , NULL , NULL , &timeout ) <= 0 )
  break;
}
こんな感じで、読めなくなったらループを抜けるようにしてますが、
応答を全部受け取る前にループを抜けてしまうことがあります。
全てきちんと受け取るにはどう変えればよろしいでしょうか?


瀬戸っぷ  2005-02-02 07:14:19  No: 56247

> メールサーバへの認証を行うプログラムを作っています。
> sendでユーザ名を指定し、recvで結果を受け取っています。

RFCを読んで仕様を理解しましょう。(翻訳されたモノも探せばあります)

で、メールサーバってPOP3ですか?
POP3ならば、1行の終わりは"\r\n"ですから、
ソレを受信するまで繰り返したらどうでしょうか?
(コマンドによっては終了は"\r\n.\r\n")


plum  2005-02-03 02:40:20  No: 56248

ありがとうございました。
仕様をよく読んでみようと思います。

なお、途中で切れたように見えたのは、前の読み残しのようでした


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加