1. 服务进程kill之后,某些情况下会出现端口处于TIME_WAIT状态,不能立即重新bind
int listenfd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in svraddr = {0};
svraddr.sin_family = AF_INET;
svraddr.sin_port = htons(svrPort);
svraddr.sin_addr.s_addr = inet_addr(svrIp); //0.0.0.0 INADDR_ANY
int addrlen = sizeof(svraddr);
//设置端口为可重复使用
int on = 1;
setsockopt( listenfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on) );
//
bind(listenfd, (struct sockaddr*)&svraddr, socklen_t(addrlen));
2. listen之后,再将文件描述符加入到epoll监听树,否则可能出现 netstat -tunlp 命令能看到端口,但没法接收到客户端连接的 问题