为什么我在linux
系统下,调用connect
函数,向一个合法的但是随机的地址发起连接时,他不会报错。同时,我向本地的随机一个端口发起连接时,他会报错
这个是我的测试代码
#include
#include
#include
#include
int main() {
struct sockaddr_in serv_addr;
serv_addr.sin_family=AF_INET;
// 随机的端口
serv_addr.sin_port=htons(795);
// 随机的地址
serv_addr.sin_addr.s_addr = inet_addr("112.4.8.12");
int sockfd;
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket creat error");
return 1;
}
int n;
if ((n = connect( sockfd, ( struct sockaddr *)&serv_addr , sizeof(struct sockaddr)) ) < 0 ) {
// 连接失败
std::cerr << "error" << std::endl;
}
return 0;
}
运行完以后,不会报出任何的错误。
正常来说这个地方不应该是会显示error
来表示连接失败嘛
求指点
ChatGPT尝试解答,仅供参考
调用 connect() 函数并不一定会立即报错,它会尝试向指定的地址发起连接。当你向一个随机的地址发起连接时,这个地址可能并不存在,或者不会有任何进程接受你的连接。这时,你的程序会等待一段时间(通常是几秒钟),然后连接超时,返回错误。
当你向本地的随机端口发起连接时,这个端口可能并不存在,或者不会有任何进程侦听这个端口。这时,你的程序会立即返回错误。
为了确保连接成功,你需要提供一个可用的地址和端口,并且要确保有一个进程在这个地址和端口上侦听连接。