Logo Search packages:      
Sourcecode: yaskkserv version File versions  Download package

void SkkServer::main_loop_send_not_found ( int  work_index,
int  recv_result 
) [inline, protected]

「見出し」の探索に失敗したものとして "4" を付加した現在のバッファの「見出し」を send() します。

現在のバッファの末尾が \n でない場合は \n を追加して send() します。

Definition at line 332 of file skk_server.hpp.

References send().

        {
// 2 回に分けて send() すれば素直になりますが、メモリをいじりまわして
// 1 回の send() にした方が高速なため、以下のようなコードになっています。
                DEBUG_ASSERT(recv_result > 1);


// read_buffer は recv() するサイズより大き目に確保されているので +
// recv_result にアクセスしても問題ありません。
                char backup_2 = *((work_ + work_index)->read_buffer + recv_result);
                int send_size;
                if (*((work_ + work_index)->read_buffer + recv_result - 1) != '\n')
                {
// 終端が  '\n' でなければ '\n' を追加します。
                        *((work_ + work_index)->read_buffer + recv_result) = '\n';
                        send_size = recv_result + 1;
                }
                else
                {
                        send_size = recv_result;
                }


                char backup = *((work_ + work_index)->read_buffer);
                *((work_ + work_index)->read_buffer) = '4';
                if (!send((work_ + work_index)->file_descriptor,
                          (work_ + work_index)->read_buffer,
                          send_size))
                {
                        (work_ + work_index)->closeAndReset();
                }
                *((work_ + work_index)->read_buffer) = backup;


                *((work_ + work_index)->read_buffer + recv_result) = backup_2;
        }


Generated by  Doxygen 1.6.0   Back to index