把setsockopt设置成REUSEADDR,为什么bind()还总是失败呢?
- C/C++ code
#include <stdio.h>#include <stdlib.h>#include <strings.h>#include <unistd.h>/*定义close()*/#include <sys/types.h>/*数据类型定义*/#include <sys/socket.h>/*提供socket函数结构*/#include <netinet/in.h>/*定义数据结构sockaddr_in*/#include <arpa/inet.h>/*提供IP地址转换函数*/#include <netdb.h>/*提供设置获取域名的函数*/#define BACKLOG 1#define PORT 2234int main(int argc,char *argv[]){ int socketfd,connectfd; struct sockaddr_in server; struct sockaddr_in client; socklen_t sin_size; if((socketfd=socket(AF_INET,SOCK_STREAM,0))==-1) { perror("creat socketfd failed!"); exit(1); } int opt=SO_REUSEADDR; setsockopt(socketfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt)); bzero(&server,sizeof(server)); server.sin_family=AF_INET; server.sin_port=htons(PORT); server.sin_addr.s_addr=htonl(INADDR_ANY); if(bind(socketfd,(struct sockaddr *)&server,sizeof(struct sockaddr))==-1); { perror("bind error!"); exit(1); } if((listen(socketfd,BACKLOG))==-1) { perror("listen failed!"); exit(1); } sin_size=sizeof(struct sockaddr_in); if((connectfd=accept(socketfd,(struct sockaddr *)&client,&sin_size))==-1) { perror("accept failed!"); exit(1); } printf("you got a connection from%s:\n",inet_ntoa(client.sin_addr)); send(connectfd,"connect to server\n",20,0); close(connectfd); close(socketfd); return 0;}[解决办法]
楼主要仔细哇!
if(bind(socketfd,(struct sockaddr *)&server,sizeof(struct sockaddr))==-1);[color=#FF0000][/color]这句后面多了一个分号!所以if后面的语句跟if就木有关系了。