我无法使用 C 套接字从 Web 服务器接收“大”文件;即当这些文件(或者我怀疑)大于我用来接收它们的缓冲区的大小时。如果我尝试(通过 GET 请求)询问index.html
不大于几个字节的简单内容,我会很好,但其他任何事情都会失败。我假设我缺乏知识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 请求都按预期工作。
在此先感谢,非常感谢任何帮助。