segment fault错误
写了一个程序,在不绑定sock中的ip的情况下,想得到recvfrom函数用来接收数据的本地IP地址(本机有多个IP地址),有两个问题请教:
(1)运行时出现segment fault错误,是哪地方出错了呢?
(2)用getsockname这种方法能得到多ip时,本地接收信息的ip地址吗?
-----------------
server.c,这是服务器端。另有一个client定时向server的指定端口5678发送数据。
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
int main()
{
int sock, pport;;
char buff[100];
socklen_t i;
char *p;
p=(char *)malloc(100*sizeof(char));
struct sockaddr_in address,ad,source;
address.sin_family=AF_INET;
address.sin_port=htons(5678);
sock=socket(AF_INET,SOCK_DGRAM,0);
bind(sock,(struct sockaddr *)&address,sizeof(address));
source.sin_family=AF_INET;
ad.sin_family=AF_INET;
i = sizeof(struct sockaddr_in);
recvfrom(sock,buff,500,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!");
}
printf("i is:%d\n",i);
p=inet_ntoa(ad.sin_addr.s_addr);
printf("Ip is:%s\n",p);
fclose(sock);
}