accept函数出现“Invalid Argument”的原因

来源:互联网 发布:中文分词算法 hanlp 编辑:程序博客网 时间:2024/06/05 06:17
转载:博客
总结自己在运用accept函数时所出现的的“Invalid Argument”时的错误,主要有以下两种误用:
首先简单介绍一下accept函数
头文件#include <sys/socket.h>
定义:int accept(int sockfd, struct sockaddr* addr, socklen_t *addrlen)
返回值:非负描述字-成功,-1出错
 
出错情况1: 在参数1处出错,多半情况是sockfd值非法,也即是没有绑定(bind),监听(listen)或者是负值等等;
出错情况2:在参数3处出错,没有给addrlen传入合法的值,或者是没有初始化(addrlen

= sizeof(addr))


自己解决:

问题就出在accept的第3个参数:必须为正数,把那个变量初始化一下就好了~
    socklen_t clilen= sizeof(struct sockaddr);
    struct sockaddr_in clientaddr;
    connfd = accept(listenfd,(sockaddr *)&clientaddr,&clilen);