2017-02-23 60 views
0

在Linux中,socket()函数可能会失败,并且EINPROGRESS是否可能?请注意,我特别询问了socket(),而不是connect()或其他人。套接字()能否通过EINPROGRESS失败

POSIX未列出EINPROGRESS作为可能的错误代码。但是,Linux中的socket()的联机帮助页说:

其他错误可能由基础协议模块生成。

是否有任何情况下该调用实际上可能会失败EINPROGRESS

+0

我看不出如何。没有什么可以进行的。没有涉及的I/O:只是创建一个套接字FD。你为什么要问? – EJP

+1

我认为这里的联机帮助页是明确的:可能有协议,实际上,_do_在调用socket()时返回'EINPROGRESS'。但是没有一个常用的协议是这样做的。那么返回引用filedescriptor是不可能的,所以它必须是一个严重的错误,这与EINPROGRESS的含义有些冲突 – Ctx

回答

0

EINPROGRESS表示操作正在进行中。它会因为外部原因而阻塞:等待远程操作或本地设备。

socket()仅在系统内存中创建条目:没有理由等待任何远程动作或任何设备。

但是,如果它能够返回EINPROGRESS,你就没有什么可以等待的。

使用文件句柄和套接字句柄,可以使用select()等待系统准备就绪。但是如果socket()本身没有返回任何东西,那么你没有什么可以等待的。

我没有看到socket()返回EIPROGRESS的理由,但无论如何这将是一个坏主意。

0

也许不是你要找的答案:

你必须检查相应的Linux kernel source codekernel/net/socket.c)throughly是100%肯定。浏览代码,它看起来不像EINPROGRESS在任何地方返回。但是,在那里有依赖于运行时的调用,所以很难说仅仅来自静态代码分析。