Linux地址信息函数:获取本端和远端的socket地址

来源:互联网 发布:mac过滤广告插件 编辑:程序博客网 时间:2024/05/22 04:35

1、在某些情况下想知道一个连接着的socket的本端地址,以及远端的socket地址,可以使用下面的两个函数。

获取本端的socket地址:

#include <sys/socket.h>int getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

获取远端的socket地址:

#include <sys/socket.h>int getpeername(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

2、sockaddr 和sockaddr_in结构体区别

struct sockaddr {    sa_family_t sa_family;    char        sa_data[14];}
struct sockaddr_in{    short sin_family;/*Addressfamily一般来说AF_INET(地址族)PF_INET(协议族)*/    unsigned short sin_port;/*Portnumber(必须要采用网络数据格式,普通数字可以用htons()函数转换成网络数据格式的数字)*/    struct in_addr sin_addr;/*Internetaddress*/    unsigned char sin_zero[8];/*Samesizeasstructsockaddr没有实际意义,只是为了 跟SOCKADDR结构在内存中对齐*/};

3、函数使用方法示例。

    struct sockaddr_in addr;    socklen_t addr_len = sizeof(struct sockaddr_in);    /* 获取本端的socket地址 */    nRet = getsockname(nClientFd,(struct sockaddr*)&addr,&addr_len);    if(nRet == -1)    {        perror("getsockname error: ");        return -1;    }    printf("this socket addr %s %d successful\n",inet_ntoa(addr.sin_addr),ntohs(addr.sin_port));
0 0