【发布时间】:2017-09-30 13:26:14
【问题描述】:
我的主要任务是编写一个通过套接字传输大数据的工具。 我的代码背后的主要思想不是太复杂,所以我将给出以下伪代码:
alignas( 4 ) struct package :
uint8_t type , is_eof , padding[ 2 ] ;
uint32_t size , checksum ;
uint8_t data[ large_size ] ;
function send :
read amount of data to the "package" ( with std::istream::read ) ;
form a "package" : load gcount() of read bytes, checksum, etc.
( hton* are used on this step ) ;
send "package" ( sendall from beej's guide ) ;
wait for approve package ;
function receive :
receive a "package" ( recv with MSG_WAITALL ) ;
unpack : calc checksum and check ( crc ), etc ;
write data to ostream ( std::ostream::write ) ;
send approve package ;
在常规构建 ( g++-5 ) 上,一切都按预期完美运行 - 发送方发送数据,接收方 接收、检查和发送响应。此外,由于我幼稚的基准 在 LAN 上,它的运行速度仅比通过 ftp 传输慢 1.5 倍。)
但是当我在 g++ 的选项中添加“-pg”标志时,在几个包接收器之后 开始接收带有垃圾的包裹。
有人知道发生了什么吗?
【问题讨论】:
标签: c++ sockets gdb g++ profiling