socket中的SO_REUSEADDR
(2008-05-14 14:42:09)
标签:
杂谈
Q: 我正在写一个unix
server程序,不是daemon,经常需要在命令行上重启它,绝大多数时候工作正常,但是某些时候会报告"bind:
address in use",于是重启失败。
A: Andrew Gierth
server程序总是应该在调用bind()之前设置SO_REUSEADDR套接字选项。至于TIME_WAIT状态,你无法避免,那是TCP协议的一部分。
Q: 如何避免等待60秒之后才能重启服务
A: Erik Max Francis
使用setsockopt,比如
--------------------------------------------------------------------------
int option = 1;
if (setsockopt ( masterSocket, SOL_SOCKET, SO_REUSEADDR,
&option, sizeof(option) ) < 0)
{
die( "setsockopt" );
}
--------------------------------------