通过fd链接去获取相应的本地地址和远端地址

 

## 通过fd链接去获取相应的本地地址和远端地址
```c
int get_ip_and_port_by_fd(int fd, char* local_ip, int* local_port, char* peer_ip, int* peer_port)
{
    if((!local_ip || !local_port) && (!peer_ip || !peer_port)){
        printf("ip or port mem is null\n");
        return -1;
    }
    struct sockaddr_in addr;
    char ip[20] = {0};
        socklen_t addr_len = sizeof(addr);
        int ret = -1;

    if(local_ip && local_port){
        getsockname(fd, (struct sockaddr_in *)&addr, &addr_len);
        inet_ntop(AF_INET, &(addr.sin_addr), ip, sizeof(addr));
        memcpy(local_ip, ip, strlen(ip));
        *local_port = ntohs(addr.sin_port);
        printf("local_ip:%s local_port:%d\n",local_ip, *local_port);
                ret = 0;
    }

    if(peer_ip && peer_port){
        getpeername(fd, (struct sockaddr_in *)&addr, &addr_len);
        inet_ntop(AF_INET, &(addr.sin_addr), ip, sizeof(addr));
        memcpy(peer_ip, ip, strlen(ip));
        *peer_port = ntohs(addr.sin_port);
        printf("peer_ip:%s peer_port:%d\n",peer_ip, *peer_port);
                ret = 0;
    }
    
    return ret;
}

```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值