getsockname,getpeername使用细节

getsockname/getpeername使用注意事项

1.得到的结果全是0,可能原因是没有初始化len变量(unp94-96)

//足够大以容纳所有受支持的协议特定的地址结构
struct sockaddr_storage storageaddr;
//地址结构的长度,长度足够容纳需要的地址
int len=sizeof(storageaddr);
bzero(&storageaddr,sizeof (storageaddr));
getsockname(sockfd,(SA *)&storageaddr,&len);
//getpeername(sockfd,(SA *)&storageaddr,&len);

if(storageaddr.ss_family==AF_INET){
    struct sockaddr_in clientaddr=*(struct sockaddr_in *)&storageaddr;
    int clientport=ntohs(clientaddr.sin_port);

    printf("port:%d\n",clientport);

    int clientintaddr=ntohl(clientaddr.sin_addr.s_addr);
    char str[INET_ADDRSTRLEN];
    inet_ntop(AF_INET,&clientintaddr,str,sizeof (str));

    printf("str:%s\n",str);
}else if(storageaddr.ss_family==AF_INET6){
    //TODO:
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值