我得到了这行的旧代码:
getpeername(0, (struct sockaddr *)&sin, &namelen)
做什么getpeername(0,...)
?它适用于所有操作系统?我试图在 SUN 中编译和运行,我得到了这个 => 非套接字上的套接字操作我在互联网上做了一些研究,但我不明白为什么我使用这条线,它返回我的“本地主机”?
谢谢
它查找文件描述符 0(即 STDIN)的对等点,即网络另一端的主机。
这可能是检查标准输入是否已重定向到套接字的一种简单方法。这在inetd风格的守护进程中很常见:如果它返回一个错误,那么它作为一个普通的守护进程启动,但是如果它成功,那么它作为一个inetd守护进程启动,这个套接字就是用于守护进程操作的套接字.
试试man getpeername
。这是一个 POSIX API,因此应该在 UNIX 和 Linux 平台上得到支持。
第一个参数必须是连接套接字的 fd。它将填写对等方(另一方)的地址。如何使用长度参数的详细信息:参见手册页
仅当 fd 0 (stdin) 绑定到套接字时,您的调用才会起作用。
这通常是由 inetd 启动的服务器的情况,但您没有告诉我们上下文。
您可能想要更改标签:这是一个 UNIX 套接字问题,但与 C++ 没有特别的关系。
您收到该错误是因为文件描述符0
通常是标准输入,而不是套接字。我不确定原作者的意图,但它不应该以它的方式工作。也许有更多的背景,我可以进一步帮助你。