メールサーバへの認証を行うプログラムを作っています。
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;
}
こんな感じで、読めなくなったらループを抜けるようにしてますが、
応答を全部受け取る前にループを抜けてしまうことがあります。
全てきちんと受け取るにはどう変えればよろしいでしょうか?
> メールサーバへの認証を行うプログラムを作っています。
> sendでユーザ名を指定し、recvで結果を受け取っています。
RFCを読んで仕様を理解しましょう。(翻訳されたモノも探せばあります)
で、メールサーバってPOP3ですか?
POP3ならば、1行の終わりは"\r\n"ですから、
ソレを受信するまで繰り返したらどうでしょうか?
(コマンドによっては終了は"\r\n.\r\n")
ありがとうございました。
仕様をよく読んでみようと思います。
なお、途中で切れたように見えたのは、前の読み残しのようでした
ツイート | ![]() |