在Recv()上拒绝连接,而发送似乎工作正常

Connection Refused on Recv(), while send seems to work fine

本文关键字:工作 Recv 连接 拒绝      更新时间:2023-10-16

我正在尝试创建一个连接到我提供的服务器/端口-在建立连接后,我能够向它发送ping数据包(至少我认为我能够,因为send()似乎返回正确的字节数),但是当我尝试之后recv()时,调用失败说

"Error on Receiving .. Connection Refused"  

关于为什么发送不会给出一个错误,但接收会吗?下面是导致我失败的部分代码——它在自己的线程上运行。TCP连接在另一个线程上建立,套接字描述符被传递给这个线程(下面称为m_sockfd)。

void ConnectionManager::operator()()
{
  int rc = 0, numBytes=0 ; 
  char reply[256] ; 
  // Send a ping
  char PingPacket[23] ; 
  PreparePingPacket(PingPacket) ; 
  numBytes = send(m_sockfd,PingPacket,23,0); 
  if(numBytes == -1)
  {
    fprintf(stderr, "Error on Sending Ping .. n") ;   
    return ; 
  }
  if(numBytes < 23)
  {
    fprintf(stderr, "Didn't send the whole Ping Request .. %d n", numBytes) ;  
  }
  numBytes = recv(m_sockfd, reply, 256, 0) ; 
  if(numBytes == -1)
  {
    fprintf(stderr, "Error on Receiving .. %s n", strerror(errno)) ;   
    return ; 
  }
  ParsePacket(reply, rc) ; 
}

我可以粘贴实际连接的代码,但我想如果它有错误,那么发送将永远不会开始?

感谢阅读-任何帮助都很感激!

发现了——这是我这边非常愚蠢的事情。问题是我的getaddrinfo()语句。我在某种程度上传递了"结构addrinfo"提示后,将其设置为全部0。这导致端点在某种程度上无效。在改变结构中的值之前放置memset,这个问题就消失了。还不确定信号是怎么发送出去的,但这就是问题所在。