套接字创建何时在C中失败?

时间:2013-06-12 06:57:25

标签: c sockets vxworks

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

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

系统配置:

  • OS:Windriver VxWorks
  • 语言:C

3 个答案:

答案 0 :(得分:6)

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

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

在Windows套接字创建中,最常见的是因为尚未执行winsock初始化调用而失败。这是IMO在API中的一个可怕的设计错误(这太糟糕了,这让我觉得它是故意尝试防止可移植性而没有真正的原因)。

答案 1 :(得分:3)

手册页说:

  

错误

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

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

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

  •   
  • EINVAL类型中的标记无效。

  •   
  • EMFILE处理文件表溢出。

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

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

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

  •   
     

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

答案 2 :(得分:0)

传入套接字类型的无效值。或者打开这么多文件句柄,它不能为套接字创建一个新文件句柄(这个数字因操作系统和版本而异)。