在编程时,经常会遇到地址已绑定的错误:Address already bind,于是不假思索的会设置ReuseAddress,但是在windows和linux有不一样的表现,表现为
内容 | windows | linux |
重复绑定端口 | 可重复绑定,任何时候不抛异常 | 不可重复绑定,占用时抛异常 |
如果端口占用,处于监听状态时 | 可重复绑定,不抛异常, 当前一个关闭后,下一个自动监听 | 不可绑定,抛异常 |
如果端口占用,处于TIME_AWAIT状态时 | 可重复绑定,不抛异常 | 可绑定并监听 |
派生的子进程 | 关闭父进程,端口不释放 必须关闭子进程或者把子进程设为操作系统外壳程序启动,如UseShellExecute=true | 关闭父进程,端口释放 |
如果不知道这种差异,实际使用时就会遇到莫名其妙的问题。