我正在尝试创建与我提供的服务器/端口的连接 - 建立连接后,我能够向它发送 ping 数据包(至少我认为我能够,因为 send() 似乎返回了正确的字节数),但是当我立即尝试 recv() 时,调用失败说
"Error on Receiving .. Connection Refused"
关于为什么 send 不会出错,但 recv 会出错的任何想法?以下是导致我失败的代码部分 - 它在它自己的线程上运行。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) ;
}
我可以粘贴进行实际连接的代码,但我想如果它有错误,那么发送将永远不会通过?
感谢阅读 - 任何帮助表示赞赏!