zoukankan      html  css  js  c++  java
  • c/c++ socket API 调用后的错误判断 perror errno

    socket API 调用后的错误判断 perror errno

    调用完socket API后,需要判断调用是否成功与失败。如果失败,会自动设置errno(是个整数), 并且用perror可以打印出具体的错误信息。

    注意点:

    1,如果有多个socket API调用失败,errno存放的是最后一个失败的API

    #include <iostream>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <unistd.h>//write
    
    using namespace std;
    
    int main(){
      int sock;
      sock = socket(AF_INET, 4000, 2000);// -------->①
      write(-1, "aaa", 4);//  ------->②
      if(sock < 0){
        perror("create socket");
        cout << errno << endl;
      }
    
    

    因为①和②的system call都失败了,所以errno里面保存的是②出失败的返回值。

    2,printf不可以在perror前面调用,因为printf里面也有system call,如果里面的system call失败了的话,也会写入errno。同理perror前面不能有别的system call。

    #include <iostream>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <unistd.h>//write
    
    using namespace std;
    
    int main(){
      int sock;
      sock = socket(AF_INET, 4000, 2000);
      if(sock < 0){
        close(fileno(stdout));//因为关闭了标准输出,所以下面的printf就会出错,会覆盖掉errno
        printf("%d
    ", errno);
        perror("create socket");
        cout << errno << endl;
      }
    }
    
    

    github源代码

    c/c++ 学习互助QQ群:877684253

    本人微信:xiaoshitou5854

  • 相关阅读:
    15 手写数字识别-小数据集
    14 深度学习-卷积
    13-垃圾邮件分类2
    12.朴素贝叶斯-垃圾邮件分类
    11.分类与监督学习,朴素贝叶斯分类算法
    9、主成分分析
    8、特征选择
    大数据应用技术课程实践--选题与实践方案
    手写数字识别-小数据集
    深度学习-卷积
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/9757676.html
Copyright © 2011-2022 走看看