我在写inetd 的克隆我必须运行一个服务器来打印连接到它的客户端的 IP 和端口。
当我覆盖时STDIN
and STDOUT
使用套接字描述符,我最初的解决方案这样做是为了恢复sockaddr_in
结构,其中包含所需的信息。这样做与getsockname()
然而,返回一个空结构,所有位都设置为 0。
知道我的方法有什么问题吗?我可以使用其他方法来恢复 IP/端口吗?
Thanks
正如 R.. 指出的,你应该使用getpeername。这两个功能和getsockname将文件描述符作为其第一个参数,而不是流指针(FILE *
). Use fileno(stdin)
获取标准输入的文件描述符(或将其硬编码为STDIN_FILENO
,因为它是常数)。
另外,最后一个论点getsockname
and getpeername
应该是一个指针socklen_t
,不是一个常数,你应该使用sockaddr_in
对于 TCP/IP:
struct sockaddr_in peeraddr;
socklen_t peeraddrlen = sizeof(peeraddr);
getpeername(STDIN_FILENO, &peeraddr, &peeraddrlen);
查看完整示例here.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)