出现此问题在于,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