CreateProcess在退出后占用套接字端口(每个套接字地址只允许使用一次)



我在进程中侦听套接字端口4000。我使用CreateProcess交换机使用另一个端口号启动另一个进程。在退出我的进程后,当我试图再次启动它时,即使子进程被终止,我也收到了这个错误:

Only one usage of each socket address (protocol/network address/port) is normally permitted.

但当我从explorer正常启动这个过程时,就不会发生冲突。我应该如何释放端口以供使用?

编辑:我使用此代码来创建新流程。

CreateProcessW(NULL, pwszCommandLine, NULL, NULL, TRUE, 
NORMAL_PRIORITY_CLASS | CREATE_DEFAULT_ERROR_MODE | CREATE_NEW_CONSOLE, 
NULL, NULL, &si, &pi)
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);

我不等待进程结束,因为这个进程不应该退出。

关闭调用只标记TCP套接字关闭。它不再可用于进程。但内核可能在一段时间内仍保留一些资源(TIME_WAIT、2MLS等(。

设置SO_REUSEADDR应该可以消除绑定问题。

因此,在调用setsockopt时,请确保true的值真的不是零(溢出错误可能会覆盖它(:

true = 1;
setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&true,sizeof(int))

以上都是从这里开始的。这有帮助吗?

最新更新