HP-Socket icon indicating copy to clipboard operation
HP-Socket copied to clipboard

TcpPackServer的IPv6双栈问题

Open L-MUD opened this issue 2 months ago • 2 comments

找了一天发现,HP的TcpPackServer没法开双栈模式,因为它start的时候已经bind了,但是setsockopt只能在bind之前设置双栈模式才有效,但是只有在start时候才能触发OnPrepareListen,并且setsockopt必须使用OnPrepareListen里的soListen,好家伙,死循环了

L-MUD avatar Oct 02 '25 13:10 L-MUD

你是Windows系统吗?Linux系统默认就支持双栈的。

后续版本可能会加入一个设置属性。

临时方案:

  1. 方案一:改变一下以下2段代码的顺序:
if(IS_HAS_ERROR(::bind(soListen, addr.Addr(), addr.AddrSize())))
{
    SetLastError(SE_SOCKET_BIND, __FUNCTION__, ::WSAGetLastError());
    return FALSE;
}

if(TRIGGER(FirePrepareListen(soListen)) == HR_ERROR)
{
    SetLastError(SE_SOCKET_PREPARE, __FUNCTION__, ENSURE_ERROR_CANCELLED);
    return FALSE;
}
  1. 方案二:修改源码,bind之前加一段代码。

ldcsaa avatar Oct 08 '25 18:10 ldcsaa

6.0.7 加入方法 SetDualStack()

ldcsaa avatar Oct 17 '25 03:10 ldcsaa