我必须对软件的套接字相关要求进行测试。作为测试的一部分,我必须创建一个套接字创建失败的案例。我的问题是如何使C语言socket()函数返回错误值-1。以下是在软件中创建套接字的代码行。
int socket = socket(AF_INET, SOCK_DGRAM, 0);
系统配置:
答案 0 :(得分:6)
除了无效参数或极低资源条件外,套接字创建很少失败(但在这些情况下通常没有任何作用,因此尝试恢复是不可能完成的任务)。
运行时失败的是例如listen
调用,因为另一个进程已经在同一端口上侦听。
在Windows套接字创建中,最常见的是因为尚未执行winsock初始化调用而失败。这是IMO在API中的一个可怕的设计错误(这太糟糕了,这让我觉得它是故意尝试防止可移植性而没有真正的原因)。
答案 1 :(得分:3)
手册页说:
错误
EACCES
拒绝创建指定类型和/或协议的套接字。
EAFNOSUPPORT
该实现不支持指定的地址系列。
EINVAL
未知的协议或协议系列不可用。
EINVAL
类型中的标记无效。
EMFILE
处理文件表溢出。
ENFILE
已达到系统对打开文件总数的限制。
ENOBUFS
或ENOMEM
内存不足。在释放足够的资源之前,无法创建套接字。
EPROTONOSUPPORT
此域中不支持协议类型或指定的协议。底层协议模块可能会生成其他错误。
答案 2 :(得分:0)
传入套接字类型的无效值。或者打开这么多文件句柄,它不能为套接字创建一个新文件句柄(这个数字因操作系统和版本而异)。