我有这个代码:
while (1) {
char buffer[4096];
memset(buffer,0,4096);
int bytes_read = recv(client_fd, buffer, sizeof(buffer),0);
if (bytes_read == 0)
break;
if (bytes_read < 0) {
std::cout<< "Error "<<endl;
}
void *p = buffer;
int dest;
dest=open("/root/hello.txt",O_WRONLY);
while (bytes_read > 0) {
int bytes_written = send(dest, buffer, bytes_read,0);
if (bytes_written <= 0) {
std::cout<< "Error2 "<<endl;
}
bytes_read -= bytes_written;
p += bytes_written;
}
}
我正确地收到了文件。
程序进入循环,其中 cout 为“Error2”,因此发送返回 -1。
问题是将文件写入新的文件描述符,在本例中为名为 dest
的变量。
我该如何解决这个问题?
最佳答案
根据 the manual-page for send(2)
,它只能写入套接字,不能写入常规文件;如果您检查了 errno
(使用例如 perror
),您会看到它被设置为 ENOTSOCK
。您应该始终看到正在设置的什么错误,否则调试只是在摸黑。
此外,由于这是 C++,我真的认为您应该使用 C++ 风格的 I/O(std::ofstream
等)来写入常规文件。
关于c++ - 接收文件错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8592645/