Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用描述符为0的getpeername_C++_Sockets - Fatal编程技术网

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。