https://www.cnblogs.com/rockyching2009/p/11032230.html
一、背景
端对端的通信中存在的一个问题是:如何唯一地标识通信主体。对于socket,解决这个问题的方式是四元组:自身IP,自身端口,对方IP,对方端口。
在socket编程中,作为client,端口号是由操作系统管理和分配的,所以不存在端口占用的情况。如果作为server,在bind某个端口的时候,或多或少遇到过如下错误:
bind: Address already in use
在进程异常终止或重启网络服务的时候,出现上述问题的情况很常见;而作为服务端又需要进程马上步入正轨,这个问题就显得尤其重要。
二、原因及解决方案
/** From APUE */
int initserver(int type, const struct sockaddr *addr, socklen_t alen)
{
int fd;
if ((fd = socket(addr->sa_family, SOCK