2011-06-30 62 views
0

我试图通过套接字发送一个二进制文件到嵌入式平台,但是当我运行它后发送它只是给我segfault(通过发送通过FTP工作正常,但它的非常慢)。
发送同一系统中的二进制文件工作正常(嵌入式是小端,所以我不认为它的endian问题)。
可能是什么问题?该程序是mft.cpp通过套接字发送一个二进制文件

回答

1

您假定每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 ; 
} 
+0

我并不需要分配固定大小的缓冲区 – Dani

+0

正确。我有几年没有编码C++了。其余的仍然适用 – jgauffin

+0

如果套接字填满,写入将写入部分缓冲区并返回写入的字节数。 – mark4o

相关问题