首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

把setsockopt设置成REUSEADDR,为何bind()还总是失败呢

2012-11-03 
把setsockopt设置成REUSEADDR,为什么bind()还总是失败呢?C/C++ code#include stdio.h#include stdlib.h

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

热点排行