C++ socket编程中如何处理connect函数返回的错误码
connect() 和 getaddrinfo() 的错误返回逻辑有区别:getaddrinfo() 会直接将错误码作为返回值返回,而 connect() 出错时只会固定返回 -1,具体错误码会存储在全局变量 errno 中。
你可以使用标准库的 strerror() 函数实现类似 gai_strerror() 的效果,传入 errno 作为参数即可获取可读的错误描述,修改后的代码示例如下:
#include <string.h> // strerror 所需头文件 #include <errno.h> // errno 所需头文件 // 其余原有代码保持不变 if((status = connect(sockfd, res->ai_addr, res->ai_addrlen)) != 0){ fprintf(stderr, "connect: %s\n", strerror(errno)); return 2; }
也可以直接用更简便的 perror() 函数直接输出带自定义前缀的错误信息:
if((status = connect(sockfd, res->ai_addr, res->ai_addrlen)) != 0){ perror("connect"); return 2; }
注意:出错后要尽快读取 errno 或调用 perror/strerror,避免中间其他系统调用出错覆盖 errno 的值。
内容的提问来源于stack exchange,提问作者Navxihziq
相关产品推荐
相关产品推荐

