SO_REUSEADDR套接字选项

在libevent库中有包裹函数

int evutil_make_listen_socket_reuseable(evutil_socket_t sock);

实际上是对setsockopt的简单封装:

int
evutil_make_listen_socket_reuseable(evutil_socket_t sock)
{
#ifndef WIN32
    int one = 1;
    /* REUSEADDR on Unix means, "don't hang on to this address after the
     * listener is closed."  On Windows, though, it means "don't keep other
     * processes from binding to this address while we're using it. */
    return setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void*) &one,
        (ev_socklen_t)sizeof(one));
#else
    return 0;
#endif
}

这个选项的意思很明显,对于一个TCP server来说它更加的常见,可以重用地址。譬如说,当我们kill掉一个server进程,然后立刻restart这个server,如果在bind()之前不设置SO_RESUEABLE,将返回错误,因为TIME_WAIT状态的存在,这些TCP链接将占有当前[ip,port]二元组,一般情况下TIME_WAIT状态将持续2分钟左右,安全的做法是等待TIME_WAIT状态的结束,不过在实际情况里,我们更希望服务器能够立刻启动。你卡

参考:
http://stackoverflow.com/questions/3229860/what-is-the-meaning-of-so-reuseaddr-setsockopt-option-linux

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值