之前一直没明白setsockopt的作用。原来是用来设置socket的属性。
setsockopt设置SO_REUSEADDR。
socket关闭之后并不会立即收回,而是要经历一个TIME_WAIT的阶段。windows下最多可以达到4分钟。
所以在这个时候对这个端口进行重新绑定就会出错。所以需要先设置 SO_REUSEADDR.
或者在closesocket的时候,使用setsockopt设置SO_DONTLINGER。也不会有TIME_WAIT的阶段.
通常使用这个设置来加强网络程序的健壮性。