connect()上的参数errno无效

时间:2011-05-22 18:28:45

标签: c++ connect errno

我正在编写一个基本上执行服务器 - 客户端关系的程序。 当我运行我的客户端(使用相关的参数,当服务器已经运行)时,我得到以下错误消息:
参数无效 以下是相关代码的一部分:

if(argc != NUM_OF_ARGS)
{
    fprintf(stderr,"usage: Client <CLIENT NAME> <SERVER ADDRESS> <SERVER PORT>\n");
    exit(1);
}

int serverPort = atoi(argv[3]);

if(serverPort == 0){
    cerr << serverPort<<endl;
    fprintf(stderr,"bad arguments\n");
    exit(1);
}

//update the local machine's addr
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(serverPort);

inet_aton(argv[2],&(server_addr.sin_addr));
memset(&(server_addr.sin_zero),'\0',8);

int fd = socket(PF_INET,SOCK_STREAM,0);
if(fd < 0){
    fprintf(stderr,strerror(errno));
    exit(1);
}

if(connect(fd,(sockaddr*)&server_addr,BUFFERSIZE) < 0){
    fprintf(stderr,strerror(errno));//My program gets here and exits.
    exit(1);
}

另一个注意事项:我作为参数提供的地址格式为:132.65.151.68

我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

connect期望第三个参数是第二个参数指向的结构的大小。有关详细信息,请参阅man 2 connect

答案 1 :(得分:-1)

为什么:

memset(&(server_addr.sin_zero),'\0',8);
具体来说,为什么神奇数字8?