出现此问题在于,listen函数在socket函数和bind函数之间。
例:
1 /*客户端程序开始建立sockfd描述符*/ 2 listenfd = socket(AF_INET,SOCK_STREAM,0); 3 if(listenfd < 0) 4 { 5 perror("socket"); 6 exit(1); 7 } 8 /*使用套接字选项,避免出错*/ 9 if(setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt)) != 0)10 {11 perror("setsockopt");12 exit(1);13 }14 /*服务器填充sockaddr结构*/15 bzero(&server,sizeof(server)); //对结构体清零16 server.sin_family = AF_INET; //IPv4地址族17 server.sin_addr.s_addr = ntohl(INADDR_ANY); //服务器IP址址18 server.sin_port = ntohs(8888); //端口号19 20 /*设置允许连接的最大客户数*/21 if(listen(listenfd,MAX_LISTEN_QUE) != 0)22 {23 perror("listen");24 exit(1);25 }26 27 /*邦定sockfd描述符到IP地址*/28 int len = sizeof(struct sockaddr);29 if(bind(listenfd,(struct sockaddr *)&server,len) != 0)30 {31 perror("bind");32 exit(1);33 }34 35
如此操作时,容易出现bind: Invalid argument