getsockname函数使用的问题
Linux系统的server,有多个IP地址。写了个程序,想使用getsockname函数得到本地接收信息的IP地址(事先不绑定socket的IP地址)。程序运行后,得到的IP总是:0.0.0.0而不是实际的接收信息的IP地址。这是怎么回事呢?怎样才能得到实际的接收信息的ip地址呢?程序如下:
---------------------
这是服务器端的程序,另外还有一个客户端定时向server发送信息。
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
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:%s\n ",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:%s\n ",p);
close(sock);
}
------解决方案--------------------没有用过这个函数:(
我认为getsockname得到的ip地址是你绑定的ip, INADDR_ANY
------解决方案-------------------- "如果当前没有绑定到该套接字的地址, 其结果没有定义 ".
自己看APUE去吧, 这是函数说明.
------解决方案--------------------我认为事先没有绑定IP地址,也应该可以得到IP地址的。
------解决方案--------------------你用什么拿? 你没有把sock和sockaddr_in绑定, 没让他们形成映射, 你怎么通过sock取得sockaddr_in?
逻辑问题想清楚先