3

我必须对软件的套接字相关要求进行测试。作为测试的一部分,我必须创建一个套接字创建失败的案例。我的问题是如何让 C 语言 socket() 函数返回错误值 -1。以下是在软件中创建套接字的代码行。

int socket = socket(AF_INET, SOCK_DGRAM, 0);

系统配置:

  • 操作系统:Windriver VxWorks
  • 语言:C
4

3 回答 3

8

除了无效参数或极低资源条件外,套接字创建很少失败(但在这些情况下,通常没有任何效果,因此尝试恢复是一项不可能完成的任务)。

例如,在运行时可能会失败的是listen调用,因为另一个进程已经在侦听同一端口。

在 Windows 中,套接字创建最常见的失败是因为尚未执行 winsock 初始化调用。这是 IMO API 中的一个可怕的设计错误(太糟糕了,让我认为这是无缘无故地阻止可移植性的故意尝试)。

于 2013-06-12T07:00:27.010 回答
3

手册页说:

错误

  • EACCES创建指定类型和/或协议的套接字的权限被拒绝。

  • EAFNOSUPPORT该实现不支持指定的地址族。

  • EINVAL未知协议或协议系列不可用。

  • EINVAL类型中的标志无效。

  • EMFILE处理文件表溢出。

  • ENFILE已达到打开文件总数的系统限制。

  • ENOBUFSENOMEM可用内存不足。在释放足够的资源之前,无法创建套接字。

  • EPROTONOSUPPORT此域不支持协议类型或指定的协议。

底层协议模块可能会产生其他错误。

于 2013-06-12T06:59:14.737 回答
0

传入套接字类型的无效值。或者打开太多文件句柄,以至于无法为套接字创建一个新句柄(这需要的数量因操作系统和版本而异)。

于 2013-06-12T06:59:32.350 回答