端口被占用BUG

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页

转载于:https://www.cnblogs.com/vanishfan/archive/2013/01/17/2865201.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值