sghall自从加了5997端口监听后,每次kill掉该进程再马上重启总是提示端口被占用,当时5997端口连接的socket处于TIME_WAIT状态,必须等超时后才会释放该端口。
一般的做法都是
int iOpt; socklen_t iLen; iOpt = 1; iLen = sizeof(iOpt); //port reuse setsockopt(sock_id, SOL_SOCKET, SO_REUSEADDR, (void *)&iOpt, iLen);
,当时不知道。一直以为必须设置一个选项让他close后没有TIME_WAIT状态,也想过要加这个,因为代码中有加。
后来才仔细看了代码是这样的
#ifdef LINUX int iOpt; socklen_t iLen; iOpt = 1; iLen = sizeof(iOpt); //port reuse setsockopt(sock_id, SOL_SOCKET, SO_REUSEADDR, (void *)&iOpt, iLen); #endif
尼玛,加了个ifdef,然后LINUX又是没有定义的宏所以写了也执行不到。
具体例子可以参照《UNIX环境高级编程》 464页