我在进程中侦听套接字端口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))
以上都是从这里开始的。这有帮助吗?