用SOCKET做进程通讯要注意的事项
用SOCKET做进程通讯时,如果客户端是由主进程创建出来的,在创建要注意不要继承父进程的属性,CreateProcess参数如下:
BOOL CreateProcess(
LPCTSTR lpApplicationName, // 应用程序名称
LPTSTR lpCommandLine, // 命令行字符串
LPSECURITY_ATTRIBUTES lpProcessAttributes, // 进程的安全属性
LPSECURITY_ATTRIBUTES lpThreadAttributes, // 线程的安全属性
BOOL bInheritHandles, // 是否继承父进程的属性
DWORD dwCreationFlags, // 创建标志
LPVOID lpEnvironment, // 指向新的环境块的指针
LPCTSTR lpCurrentDirectory, // 指向当前目录名的指针
LPSTARTUPINFO lpStartupInfo, // 传递给新进程的信息
LPPROCESS_INFORMATION lpProcessInformation // 新进程返回的信息
);
bInheritHandles 这参数要设置成FALSE,子进程才不会承继父进程的属性。否则如果客户端没关闭时,服务端重新打开时会出现网络端口占用的情况。错误代码为10048。