使用-pg选项构建时出现不同的意外错误

时间:2017-05-02 21:46:31

标签: c++ sockets gdb g++ profiling

我的主要任务是编写一个可以通过套接字传输大数据的工具。 我的代码背后的主要思想并不太复杂,所以我只是给出以下伪代码:

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倍。)

但是当我添加' -pg'在几个包接收器之后,标记为g ++的选项  开始接收垃圾包。

有没有人知道发生了什么事。

1 个答案:

答案 0 :(得分:0)

我不知道你是如何得到你的插座所以这是一个疯狂的猜测基于我在2003年左右看到的类似问题:

你有一些代码可以“帮助”关闭3到1024(或4096,或NOFILE等)的Unix文件描述符。然后重新使用FD 3作为套接字。

提示:配置文件使用文件描述符。

在我过去的类似问题中,在FD 3上打开的套接字被发送所有与预期数据交错的分析数据。

如果您没有打开它,请不要关闭它。