套接字复制时 WSASocket 出现 WSAEINVAL 错误
我试图不断地将套接字从一个进程传输到另一个进程。我在主进程上使用 WSADuplicateSocket ,它总是工作正常。然后我在子进程上调用 WSASocket。但是,我偶尔会从 WSASocket 收到 WSAEINVAL 错误。
我检查 lpWsaProtocolInfo 参数,它总是好的。所以我真的不知道这个错误是怎么发生的?
老师:
int err = WSADuplicateSocket( sockFd, childPID,
(LPWSAPROTOCOL_INFO)sockInfo );
孩子:
LPWSAPROTOCOL_INFO lpWsaProtocolInfo =
(LPWSAPROTOCOL_INFO)malloc( sizeof( *lpWsaProtocolInfo ) );
memcpy( lpWsaProtocolInfo, sockInfo, sizeof( *lpWsaProtocolInfo ) );
sockFd = WSASocket( AF_INET, SOCK_STREAM, IPPROTO_TCP, lpWsaProtocolInfo,
0, 0 );
I'm trying to transfer socket from the one process to the another process constantly. I'm using WSADuplicateSocket on the master process which always works fine. Then I'm calling WSASocket on the child process. However, I do get WSAEINVAL error from WSASocket once in a while.
I check lpWsaProtocolInfo parameter and it's always good. So I really have no idea how this error could happen?
Master:
int err = WSADuplicateSocket( sockFd, childPID,
(LPWSAPROTOCOL_INFO)sockInfo );
Child:
LPWSAPROTOCOL_INFO lpWsaProtocolInfo =
(LPWSAPROTOCOL_INFO)malloc( sizeof( *lpWsaProtocolInfo ) );
memcpy( lpWsaProtocolInfo, sockInfo, sizeof( *lpWsaProtocolInfo ) );
sockFd = WSASocket( AF_INET, SOCK_STREAM, IPPROTO_TCP, lpWsaProtocolInfo,
0, 0 );
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
检查子进程的访问权限。确保调用 CreateProcess 时 bInheritHandles 为 true。
我在 dwCreationFlags 中使用 CREATE_PRESERVE_CODE_AUTHZ_LEVEL,它对我有用。
Check the Access Rights of the Child process. Make sure that bInheritHandles is true on your call to CreateProcess.
I use CREATE_PRESERVE_CODE_AUTHZ_LEVEL in dwCreationFlags, and it works for me.