当前位置:  技术问答>linux和unix

getsockname函数使用的问题

    来源: 互联网  发布时间:2016-02-28

    本文导语:  Linux系统的server,有多个IP地址。写了个程序,想使用getsockname函数得到本地接收信息的IP地址(事先不绑定socket的IP地址)。程序运行后,得到的IP总是:0.0.0.0而不是实际的接收信息的IP地址。这是怎么回事呢?怎样才...

Linux系统的server,有多个IP地址。写了个程序,想使用getsockname函数得到本地接收信息的IP地址(事先不绑定socket的IP地址)。程序运行后,得到的IP总是:0.0.0.0而不是实际的接收信息的IP地址。这是怎么回事呢?怎样才能得到实际的接收信息的ip地址呢?程序如下:
---------------------
这是服务器端的程序,另外还有一个客户端定时向server发送信息。
#include
#include
#include
int main()
{
        int sock;
        char buff[100];
        socklen_t  i;
        char *p;
        int pport;
        struct sockaddr_in address,ad;
        address.sin_family=AF_INET;
        address.sin_port=htons(5678);
        address.sin_addr.s_addr=htonl(INADDR_ANY);
        sock=socket(AF_INET,SOCK_DGRAM,0);
        source.sin_family=AF_INET;
        ad.sin_family=AF_INET;
        ad.sin_addr.s_addr=htonl(INADDR_ANY);
        bind(sock,(struct sockaddr *)&address,sizeof(address));
        memset(buff,0,100);
        i = sizeof(struct sockaddr_in);
        recvfrom(sock,buff,100,0,(struct sockaddr *)&source,&i);
        printf("Data recieved is:%sn",buff);
        i = sizeof(struct sockaddr_in);
        if(getsockname(sock,(struct sockaddr *)&ad,&i))
        {
                puts("Error!");
        }
        p=inet_ntoa(ad.sin_addr.s_addr);
        printf("Ip is:%sn",p);
        close(sock);
}

|
没有用过这个函数:(
我认为getsockname得到的ip地址是你绑定的ip, INADDR_ANY

|
"如果当前没有绑定到该套接字的地址, 其结果没有定义".
自己看APUE去吧, 这是函数说明.

|
我认为事先没有绑定IP地址,也应该可以得到IP地址的。

|
你用什么拿? 你没有把sock和sockaddr_in绑定, 没让他们形成映射, 你怎么通过sock取得sockaddr_in?

逻辑问题想清楚先

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • getsockname的用法
  • linux 下 getsockname很奇怪的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,