C++ 使用描述符为0的getpeername
我用这行代码得到了一个旧代码:C++ 使用描述符为0的getpeername,c++,sockets,C++,Sockets,我用这行代码得到了一个旧代码: getpeername(0, (struct sockaddr *)&sin, &namelen) getpeername(0,…)的作用是什么? 它适用于所有操作系统? 我试着在太阳下编译和运行,我在非套接字上得到了这个=>Socket操作 我在互联网上做了一些研究,但我不明白为什么我使用这行,它返回我的“localhost” 谢谢试试man-getpeername。这是一个POSIXAPI,因此应该在UNIX和Linux平台上受支持 第一个参
getpeername(0, (struct sockaddr *)&sin, &namelen)
getpeername(0,…)
的作用是什么?
它适用于所有操作系统?
我试着在太阳下编译和运行,我在非套接字上得到了这个=>Socket操作
我在互联网上做了一些研究,但我不明白为什么我使用这行,它返回我的“localhost”
谢谢试试
man-getpeername
。这是一个POSIXAPI,因此应该在UNIX和Linux平台上受支持
第一个参数必须是已连接套接字的fd。它将填写对等方(另一方)的地址。有关如何使用长度参数的详细信息:请参见手册页
只有当fd 0(stdin)绑定到套接字时,您的呼叫才能工作
对于由inetd启动的服务器,通常情况就是这样,但您没有告诉我们上下文
您可能想更改标签:这是一个UNIX套接字问题,但与C++没有特殊关系。
< p>您得到了这个错误,因为文件描述符<代码> 0 通常是标准输入,而不是套接字。我不确定原作者的意图是什么,但它不应该按现在的方式工作。也许我可以通过更多的上下文来进一步帮助您。它查找文件描述符0(即STDIN)的对等主机,即网络另一端的主机这可能是检查标准输入是否已重定向到套接字的一种简单方法。这在inetd风格的守护进程中很常见:如果它返回错误,则作为正常的守护进程启动,但如果成功,则作为inetd守护进程启动,而此套接字正是用于守护进程操作的套接字。Windows上也支持此套接字:很抱歉问这个问题,但我如何启动inetd风格daemons@demonofnight:嗯,要在inetd模式下启动它,您不需要手动启动它,而是由守护进程启动。或者,最近,由systemd,IIRC。