从套接字描述符中恢复IP /端口

kon*_*onr 6 c sockets tcp inetd

我正在写一个inetd的克隆,我必须运行一个服务器,打印连接到它的客户端的IP和端口.

当我覆盖STDINSTDOUT使用套接字描述符时,我的初始解决方案是恢复sockaddr_in包含所需信息的结构.getsockname()但是,这样做会返回一个空结构,所有位都设置为0.

知道我的方法有什么问题吗?我还可以使用其他方法来恢复IP /端口吗?

谢谢

Fre*_*Foo 9

正如R ..指出,你应该使用getpeername.这两个函数都将getsockname文件描述符作为其第一个参数,而不是流指针(FILE *).使用fileno(stdin)以获取标准输入的文件描述符(或有硬代码STDIN_FILENO,因为它是常量).

另外,最后一个参数getsocknamegetpeername应该是指针socklen_t,而不是常量,你应该使用sockaddr_infor TCP/IP:

struct sockaddr_in peeraddr;
socklen_t peeraddrlen = sizeof(peeraddr);
getpeername(STDIN_FILENO, &peeraddr, &peeraddrlen);
Run Code Online (Sandbox Code Playgroud)

请在此处查看完整示例.