0

ソケットをあるプロセスから別のプロセスに絶えず転送しようとしています。私は常に正常に動作するマスタープロセスで 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 );
4

1 に答える 1

0

子プロセスのアクセス権を確認してください。CreateProcessの呼び出しでbInheritHandlesがtrueであることを確認してください。

私はdwCreationFlagsでCREATE_PRESERVE_CODE_AUTHZ_LEVELを使用していますが、それは私のために機能します。

于 2011-04-14T21:50:08.087 に答える