接受返回的套接字 ID 0——这是预期的吗?

Accept returning socket ID of 0 -- Is it expected?

自从过去两天以来,我一直在调试一些东西,似乎在我的 linux m/c 上,accept 返回的套接字 ID 为零。

       fd = accept(unix_domain_socket,
                   (struct sockaddr *) &new_connection,
                   &new_conn_length);

我看到 fd 正在返回 0 -- 这有效吗? 0 是有效的套接字 fd 编号吗?

是的。 -1 表示失败,但 0 表示有效。不过,通常文件描述符零被标准输入占用。

任何非负值都是成功。

http://linux.die.net/man/2/accept

是的,可以预料。 通常一个进程默认在 fds 下打开,索引为:

0 : stdin
1 : stdout
2 : stderr

如果您的进程有意或无意地关闭了 fd '0',那么下一个 fd 请求可以选择第 0 个索引。