kon*_*onr 6 c sockets tcp inetd
我正在写一个inetd的克隆,我必须运行一个服务器,打印连接到它的客户端的IP和端口.
当我覆盖STDIN
并STDOUT
使用套接字描述符时,我的初始解决方案是恢复sockaddr_in
包含所需信息的结构.getsockname()
但是,这样做会返回一个空结构,所有位都设置为0.
知道我的方法有什么问题吗?我还可以使用其他方法来恢复IP /端口吗?
谢谢
正如R ..指出,你应该使用getpeername
.这两个函数都将getsockname
文件描述符作为其第一个参数,而不是流指针(FILE *
).使用fileno(stdin)
以获取标准输入的文件描述符(或有硬代码STDIN_FILENO
,因为它是常量).
另外,最后一个参数getsockname
和getpeername
应该是指针socklen_t
,而不是常量,你应该使用sockaddr_in
for TCP/IP:
struct sockaddr_in peeraddr;
socklen_t peeraddrlen = sizeof(peeraddr);
getpeername(STDIN_FILENO, &peeraddr, &peeraddrlen);
Run Code Online (Sandbox Code Playgroud)
请在此处查看完整示例.