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

绑定端口时出错“;“地址已在使用中”;unix中的TCP套接字编程,c,sockets,unix,tcp,C,Sockets,Unix,Tcp,我已经浏览了很多帖子和论坛,我对socket编程还是新手。我的代码的主要部分与 但后来我更改了代码,以便包括“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_ad

我已经浏览了很多帖子和论坛,我对socket编程还是新手。我的代码的主要部分与

但后来我更改了代码,以便包括“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!");
}

检查端口是否在使用。
telnet
到该端口或使用
netstat-a
。它应该在使用中(如错误所示),并终止相应的进程。可能使用
ps
查找进程。

检查端口是否正在使用。
telnet
到该端口或使用
netstat-a
。它应该在使用中(如错误所示),并终止相应的进程。可能使用
ps
查找进程。

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


SO\u REUSEADDR
用于当绑定到地址的套接字已关闭时,可以再次直接使用相同的地址(ip地址/端口对)。

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


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

检查
setsockopt
返回的值。是否确定在某个地方没有延迟进程?绑定失败时,setsockopt的返回值为0,但是,如果服务器已启动,则返回值不显示。请检查由
setsockopt
返回的值。是否确定在某个地方没有延迟的进程?绑定失败时,setsockopt的返回值为0,但是如果服务器已启动,则返回值不显示。在我的代码中(如上所述)我设置了关闭套接字的条件,以防绑定失败。我还检查了setsockopt的返回值,它是0。@arvind在对Eds答案的评论中说您的程序仍然处于活动状态。您必须停止当前正在运行的程序,然后才能再次运行它,就像我在回答中所说的那样。端口号不能被多个程序共享。所以我必须终止它。我是否无法在不杀死端口的情况下重用端口?关闭文件描述符不足以关闭连接并重用它吗?@arvind是的,关闭套接字应该足够了。但是在我的代码中,条件是如果绑定失败,那么我使用关闭文件描述符“close(sockfd)”发出错误“error in binding”,然后退出,这不会帮我关闭套接字吗?在我看来,程序在重新执行时,应该有一次出现错误,关闭套接字,但在另一次重新执行时,应该可以正常工作。但事实并非如此。请帮助我在我的代码中(如上所述),我设置了关闭套接字的条件,以防绑定失败。我还检查了setsockopt的返回值,它是0。@arvind在对Eds答案的评论中说您的程序仍然处于活动状态。您必须停止当前正在运行的程序,然后才能再次运行它,就像我在回答中所说的那样。端口号不能被多个程序共享。所以我必须终止它。我是否无法在不杀死端口的情况下重用端口?关闭文件描述符不足以关闭连接并重用它吗?@arvind是的,关闭套接字应该足够了。但是在我的代码中,条件是如果绑定失败,那么我使用关闭文件描述符“close(sockfd)”发出错误“error in binding”,然后退出,这不会帮我关闭套接字吗?在我看来,程序在重新执行时,应该有一次出现错误,关闭套接字,但在另一次重新执行时,应该可以正常工作。但事实并非如此。请帮助menetstat-natp显示我的服务器仍处于活动状态tcp 0.0.0.0:5555 0.0.0.0:*侦听24328/servernetstat-natp显示我的服务器仍处于活动状态tcp 0.0.0.0:5555 0.0.0:*侦听24328/server
                                                            Thanks a lot in advance