#include <string.h>
#include "../include/apue.h"
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/errno.h>
int main(int argc, char **argv)
{
int sockfd, n;
char recvline[MAXLINE + 1];
struct sockaddr_in servaddr;
if(argc != 2)
err_quit("Usage: ./a.out <IPAddress>");
if((sockfd = socket(PF_INET, SOCK_STREAM, 0)) < 0)
err_quit("socket error!");
bzero(&servaddr, sizeof(servaddr)); //there is warning : bzero 不兼容
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(8008);
//servaddr.sin_addr.s_addr = inet_addr(argv[1]); //inet_addr() only support IPv4
inet_pton(AF_INET, argv[1], &servaddr.sin_addr); //inet_pton() also can support IPv6
if( (connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr))) < 0)
err_sys("connect error!");
while((n = read(sockfd, recvline, MAXLINE)) > 0)
{
recvline[n] = 0; //null terminate
if(fputs(recvline, stdout) == EOF)
err_sys("EOF");
}
exit(0);
}
同一.c文件,在台式机运行一切正常. 32位 XP
当复制到笔记本上编译运行时竟然提示段错误.当时就好无奈. 果断gcc -g 调试,发现问题出在inet_pton().
好吧,找到了解决方法:
#include <apra/inet.h>即可.
原来笔记本是64位 WIN7,所以才会出现这种情况.