ghost_him 2022-12-17 23:57 采纳率: 60%
浏览 9
已结题

linux下connect()函数连接失败时(向一个随机的地址连接)不会返回错误值

问题遇到的现象和发生背景

为什么我在linux系统下,调用connect函数,向一个合法的但是随机的地址发起连接时,他不会报错。同时,我向本地的随机一个端口发起连接时,他会报错

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%

这个是我的测试代码

#include <iostream>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>

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来表示连接失败嘛

求指点

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2022-12-18 01:26
    关注

    ChatGPT尝试解答,仅供参考
    调用 connect() 函数并不一定会立即报错,它会尝试向指定的地址发起连接。当你向一个随机的地址发起连接时,这个地址可能并不存在,或者不会有任何进程接受你的连接。这时,你的程序会等待一段时间(通常是几秒钟),然后连接超时,返回错误。


    当你向本地的随机端口发起连接时,这个端口可能并不存在,或者不会有任何进程侦听这个端口。这时,你的程序会立即返回错误。


    为了确保连接成功,你需要提供一个可用的地址和端口,并且要确保有一个进程在这个地址和端口上侦听连接。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月26日
  • 已采纳回答 12月18日
  • 创建了问题 12月17日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改