在Linux中创建套接字时获取错误代码

雅亚·乌丁(Yahya Uddin)

我正在Linux中进行一些套接字编程,想知道当函数socket(...)时如何获取错误代码。失败。

例如对于“ getaddrinfo”功能,我可以这样做:

//Resolve the server address and port
    result = (struct addrinfo *) calloc(1, sizeof(struct addrinfo));
    iResult = getaddrinfo("google.com", DEFAULT_PORT, &hints, &result);
    if (iResult != 0){
        printf("%d\n", iResult);
        fprintf(stderr, "getaddrinfo failed: %s\n", gai_strerror(iResult));
        getchar();
        exit(EXIT_FAILURE);
    }

但是我想使用socket(...)函数做类似的事情。

据此:http : //linux.die.net/man/2/socket

函数在失败时返回-1,并将errno设置为适当的错误号。我如何访问此“ errno”?到目前为止,这是我的代码:

int connectSocket = 0;
connectSocket = socket(AF_INET, SOCK_STREAM, 0);
printf("%d\n", connectSocket);

if (connectSocket == -1){
    printf("socket failed with error: %s\n", error_string); //TODO: HELP DECLARING error_string
    getchar();
    exit(EXIT_FAILURE);
}
乔纳森·莱因哈特

errno是在中定义的线程局部全局变量<errno.h>许多库函数的手册页将指示它们在错误时返回-1并设置errno

您可以errno使用strerror函数转换为有用的字符串

通常,您应该这样编写代码:

#include <stdio.h>
#include <errno.h>

int main(void) {
    int s;

    s = socket(...);
    if (s < 0) {
        fprintf(stderr, "socket() failed: %s\n", strerror(errno));
        exit(1);
    }
}

另外,glibcprintf和朋友支持%m格式说明符,该说明符被替换为strerror(errno)(不需要参数)。因此,以上示例可以替换为:

    if (s < 0) {
        fprintf(stderr, "socket() failed: %m\n");
        exit(1);
    }

为了使一切变得更简单,有一个perror功能,可以打印出与上面类似的消息。

    if (s < 0) {
        perror("socket");
        exit(1);
    }

总结一切-错误处理不必太复杂和冗长。将socket调用和test< 0放在一个语句中,上面的代码可能看起来像这样,您将成为真正的UNIX专业人士:

#include <stdio.h>
#include <errno.h>

int main(void) {
    int s;

    if ((s = socket(...)) < 0) {
        perror("socket");
        exit(1);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Android Native应用中无法创建客户端套接字。错误代码:14无法创建套接字:权限被拒绝

来自分类Dev

当服务器重新引导并且客户端收到WSAECONNRESET错误代码时,我是否应该重新创建整个套接字?

来自分类Dev

在MySQL中创建过程时,错误代码:1136

来自分类Dev

Linux中但不是MacOS中的套接字创建错误

来自分类Dev

休息时获取BizTalk中的HTTP错误代码

来自分类Dev

在Java中创建套接字时出现IOException错误

来自分类Dev

在Ubuntu 16.04中安装MSSQL Server时获取错误代码(1)

来自分类Dev

MySQL:错误代码:1064。创建过程时

来自分类Dev

创建项目时Vue CLI收到错误代码4058

来自分类Dev

连接到 Postgres DB 失败时获取错误代码

来自分类Dev

使用 smsapi 发送短信时获取错误代码 14

来自分类Dev

尝试创建套接字时出现分段错误 - 程序集

来自分类Dev

BASH从子终端在父终端中获取错误代码?

来自分类Dev

如何在Java中获取SQLiteConstraintException的错误代码

来自分类Dev

获取脚本的错误代码在bash脚本中运行?

来自分类Dev

Safari中未获取jQuery AJAX HTTP错误代码

来自分类Dev

Linux中的标准错误代码是什么?

来自分类Dev

linux中的分段错误(C中的套接字编程(TCP))

来自分类Dev

linux中的分段错误(C中的套接字编程(TCP))

来自分类Dev

WSASend()和WSARecv()的所有错误代码是否都意味着套接字已断开连接?

来自分类Dev

使用Unix套接字获取“地址已在使用中”错误

来自分类Dev

Xcode帮助:在Objective-C中创建自定义类时出现非特定错误代码

来自分类Dev

当我尝试在 MySQL 中创建表时,它给了我错误代码 1215:“无法添加外键约束”

来自分类Dev

在C#中的远程计算机上执行命令时获取错误代码1

来自分类Dev

ZeroMQ:重新绑定套接字时,地址使用中错误

来自分类Dev

当响应代码为错误代码时如何从ConnectionRequest获取响应数据

来自分类Dev

套接字io在套接字连接时创建房间

来自分类Dev

Linux中的套接字连接

来自分类Dev

尝试从数据库获取json数据时获取MYSQL错误代码

Related 相关文章

  1. 1

    在Android Native应用中无法创建客户端套接字。错误代码:14无法创建套接字:权限被拒绝

  2. 2

    当服务器重新引导并且客户端收到WSAECONNRESET错误代码时,我是否应该重新创建整个套接字?

  3. 3

    在MySQL中创建过程时,错误代码:1136

  4. 4

    Linux中但不是MacOS中的套接字创建错误

  5. 5

    休息时获取BizTalk中的HTTP错误代码

  6. 6

    在Java中创建套接字时出现IOException错误

  7. 7

    在Ubuntu 16.04中安装MSSQL Server时获取错误代码(1)

  8. 8

    MySQL:错误代码:1064。创建过程时

  9. 9

    创建项目时Vue CLI收到错误代码4058

  10. 10

    连接到 Postgres DB 失败时获取错误代码

  11. 11

    使用 smsapi 发送短信时获取错误代码 14

  12. 12

    尝试创建套接字时出现分段错误 - 程序集

  13. 13

    BASH从子终端在父终端中获取错误代码?

  14. 14

    如何在Java中获取SQLiteConstraintException的错误代码

  15. 15

    获取脚本的错误代码在bash脚本中运行?

  16. 16

    Safari中未获取jQuery AJAX HTTP错误代码

  17. 17

    Linux中的标准错误代码是什么?

  18. 18

    linux中的分段错误(C中的套接字编程(TCP))

  19. 19

    linux中的分段错误(C中的套接字编程(TCP))

  20. 20

    WSASend()和WSARecv()的所有错误代码是否都意味着套接字已断开连接?

  21. 21

    使用Unix套接字获取“地址已在使用中”错误

  22. 22

    Xcode帮助:在Objective-C中创建自定义类时出现非特定错误代码

  23. 23

    当我尝试在 MySQL 中创建表时,它给了我错误代码 1215:“无法添加外键约束”

  24. 24

    在C#中的远程计算机上执行命令时获取错误代码1

  25. 25

    ZeroMQ:重新绑定套接字时,地址使用中错误

  26. 26

    当响应代码为错误代码时如何从ConnectionRequest获取响应数据

  27. 27

    套接字io在套接字连接时创建房间

  28. 28

    Linux中的套接字连接

  29. 29

    尝试从数据库获取json数据时获取MYSQL错误代码

热门标签

归档