0
我试图通过套接字发送一个二进制文件到嵌入式平台,但是当我运行它后发送它只是给我segfault(通过发送通过FTP工作正常,但它的非常慢)。
发送同一系统中的二进制文件工作正常(嵌入式是小端,所以我不认为它的endian问题)。
可能是什么问题?该程序是mft.cpp通过套接字发送一个二进制文件
我试图通过套接字发送一个二进制文件到嵌入式平台,但是当我运行它后发送它只是给我segfault(通过发送通过FTP工作正常,但它的非常慢)。
发送同一系统中的二进制文件工作正常(嵌入式是小端,所以我不认为它的endian问题)。
可能是什么问题?该程序是mft.cpp通过套接字发送一个二进制文件
您假定每read
返回您要读取的字节数。这是不正确的。您应该始终检查read
返回值,以查看是否有足够多的字节。
这也意味着,你可以重写你发送环路:
int bytesLeft = file_length;
char buf[1024]; //no need to reallocate it in the loop
while(bytesLeft > 0)
{
int to_read = 1024;
if(bytesLeft < to_read)
to_read = bytesLeft
int bytesRead = read(new_sock_id, buf, to_read);
if(error("reading file", false)) continue;
write(file, buf, bytesRead);
if(error("writing file", false)) continue;
bytesLeft -= bytesRead ;
}
我并不需要分配固定大小的缓冲区 – Dani
正确。我有几年没有编码C++了。其余的仍然适用 – jgauffin
如果套接字填满,写入将写入部分缓冲区并返回写入的字节数。 – mark4o