Cソケットを使用してWebサーバーから「大きな」ファイルを受信するのに問題があります。つまり、これらのファイル(または私が疑う)が、それらを受信するために使用しているバッファーのサイズよりも大きい場合です。index.html
(GETリクエストを介して)数バイト以下の単純なものを要求しようとすると、問題はありませんが、それ以外は失敗します。私の知識の欠如、select()
またはそれrecv()
が私を失敗させているものだと思います。ここを参照してください:
fd_set read_fd_set;
FD_ZERO(&read_fd_set);
FD_SET((unsigned int)socketId, &read_fd_set);
/* Initialize the timeout data structure. */
struct timeval timeout;
timeout.tv_sec = 2;
timeout.tv_usec = 0;
// Receives reply from the server
int headerReceived = 0;
do {
select(socketId+1, &read_fd_set, NULL, NULL, &timeout);
if (!(FD_ISSET(socketId, &read_fd_set))) {
break;
}
byteSize = recv(socketId, buffer, sizeof buffer, 0);
if (byteSize == 0 || (byteSize < BUFFER_SIZE && headerReceived)) {
break;
}
headerReceived = 1;
} while(1);
そうです、GETリクエストをWebサーバーに送信した後、サーバーは正常に動作していると確信しており、他のクライアント(Webブラウザーなど)からのGETリクエストは意図したとおりに機能しています。
よろしくお願いします。どんな助けでも大歓迎です。