linux reuseaddr选项在socat中到底做了什么?

hvvq6cgz  于 2023-01-12  发布在  Linux
关注(0)|答案(1)|浏览(517)

我正在阅读关于socat here和这里的文档。
示例socat -u TCP4-LISTEN:3334,reuseaddr,fork OPEN:/tmp/test.log,creat,append在使用和不使用选项reuseaddr时都能很好地工作。
我已经在这两种情况下使用-f选项来跟踪分叉,但还没有看到SO_REUSEADDRSO_REUSEPORT
reuseaddr是做什么的?为什么上面的例子在使用和不使用reuseaddr的情况下都能很好地工作?在哪些情况下确实需要reuseaddr
关于tcp/udp和reuseaddr选项还有什么其他说明吗?

bqf10yzr

bqf10yzr1#

这是最重要的部分:www.example.comhttp://www.dest-unreach.org/socat/doc/socat.html#EXAMPLE_OPTION_REUSEADDR
由于reuseaddr,它允许在主进程终止后立即重新启动,即使一些子套接字没有完全关闭
因此,只有 * 在某些子套接字没有完全关闭 * 的情况下,才能看到差异。
我已经尝试了您的示例,可以看到(使用lsof)套接字上的reuseaddr选项已激活

socat -u TCP4-LISTEN:3334,reuseaddr,fork OPEN:/tmp/test.log,creat,append
...
lsof -nP -i -sTCP:LISTEN -T f | grep 3334
socat     46095 userabc    5u  IPv4 0x59cfcb9c717622ef      0t0  TCP *:3334 (SO=ACCEPTCONN,PQLEN=0,QLEN=0,QLIM=5,RCVBUF=1048576,REUSEADDR,SNDBUF=1048576 TF=MSS=512,UNKNOWN=0xa0)
socat -u TCP4-LISTEN:3334,fork OPEN:/tmp/test.log,creat,append
...
lsof -nP -i -sTCP:LISTEN -T f | grep 3334
socat     46375 userabc    5u  IPv4 0x59cfcb9c6f806e0f      0t0  TCP *:3334 (SO=ACCEPTCONN,PQLEN=0,QLEN=0,QLIM=5,RCVBUF=1048576,SNDBUF=1048576 TF=MSS=512,UNKNOWN=0xa0)

相关问题