读书人

把setsockopt设置成REUSEADDR为何bi

发布时间: 2012-11-03 10:57:43 作者: rapoo

把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就木有关系了。

读书人网 >UNIXLINUX

热点推荐