绑定端口“已在使用的地址”中的错误unix中的TCP套接字编程

时间:2012-02-09 08:53:39

标签: c sockets unix tcp

我经历了很多帖子和论坛,我是socket编程的新手。我的代码的主要部分类似于 BIND ERROR : Address already in use

然后我更改了我的代码,以便我包含“setsockopt”函数,如下所示:

const char* port="5555";
int opt=1;
portno=atoi(port);
//parameters for server address
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(portno);
serv_addr.sin_addr.s_addr=INADDR_ANY;
//bind the socket to the address
setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,(const char *)&opt,sizeof(int));


 if(bind(sockfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr))<0)
{close(sockfd);
error("error in binding port!");
}

但我仍然得到错误。我必须关闭终端并重新启动才能再次使用该端口。我想使用硬编码端口(就像我在上面的代码中提到的那样)

                                                            Thanks a lot in advance

2 个答案:

答案 0 :(得分:3)

检查端口是否正在使用中。 telnet到该端口或使用netstat -a。它应该在使用中(如错误所示)并杀死适当的进程。也许使用ps来查找过程。

答案 1 :(得分:1)

端口号一次只能由一个应用程序使用。这意味着你不能两次启动同一个程序,期望两者都绑定到同一个端口。

SO_REUSEADDR用于当绑定到地址的套接字已经关闭时,可以直接再次使用相同的地址(ip-address / port对)。