【发布时间】:2015-01-15 10:48:41
【问题描述】:
socket(AF_INET, SOCK_STREAM, 0);
通常我们将0 作为socket() 的第三个参数,所以这里默认使用TCP 作为传输协议。但是如果我们用 UDP 代替 0 呢?
【问题讨论】:
-
何不自己试试呢?
-
@SouravGhosh 因为他无法可靠地测试发生了什么。它可能只是 UB。
-
@usr 检查系统调用的成功[失败],
errno是基础。 -
@usr 要么成功,要么失败。如果失败,该函数返回 -1 并且有一个
errno值要询问。未定义行为的概念来自语言规范,而不是系统库。 -
@EJP 并非所有库调用都完全验证其参数。如果库作者没有指定传递无效参数时会发生什么,则可能有 UB。也就是说,我认为这里不是这种情况。此外,调用可能仅在某些情况下成功。这是不可测试的。我认为这个问题是有效的。