为什么我的recv没有获得任何数据

时间:2017-06-27 15:25:19

标签: c++ sockets tcp

这是我用来执行send()和recv()的函数。

bool Socket::send( const std::string s ) const noexcept {
  int status = ::send ( m_sock, s.c_str(), s.size(), MSG_NOSIGNAL );

  if(status == -1)
    return false;
  else
    return true;
}

int Socket::recv( std::string& s ) const noexcept {
  char buf [ MAXRECV + 1 ];
  s = "";

  memset ( buf, 0, MAXRECV + 1 );

  int status = ::recv ( m_sock, buf, MAXRECV, 0 );

  if ( status == -1 ) {
    std::cout << "status == -1   errno == " << errno << "  in Socket::recv\n";
    return 0;
  }
  else if ( status == 0 ) {
    return 0;
  }
  else {
    s = buf;
    return status;
  }
}

服务器接受客户端,然后使用测试消息调用send()。

std::cout << server.send(s) << std::endl;

总是返回false(将0写入cout)。客户端recv()执行以下操作。

std::string s;
  int i = 0;
  while (s.empty()) {
    i = k.read(s);
  }

它永远不会离开这个循环。两者都通过调用此函数设置阻塞,并将false作为参数发送。

void Socket::set_non_blocking ( const bool b ) noexcept {
  int opts;

  opts = fcntl(m_sock, F_GETFL);

  if(opts < 0)
    return;

  if( b )
    opts = ( opts | O_NONBLOCK );
  else
    opts = ( opts & ~O_NONBLOCK );

  fcntl( m_sock, F_SETFL,opts );
}

0 个答案:

没有答案