如何转移Socket

im战术 2017-07-03 02:00:07
我有1个服务器
1个客户端,当这个客户端连接后,我想把这个客户端里的Socket给我的另一个程序使用.
我用了DuplicateAndClose,但是将里面的Socket信息移交给另一个进程后复原就无法再次使用
可能是我没解理DuplicateAndClose的: 复制目标进程的套接字引用(复制谁),并关闭此进程的套接字(关闭谁)。
返回值里生成什么样的信息?
能给我说说DuplicateAndClose的各个参数的操作方向吗?
...全文
141 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
im战术 2017-07-06
  • 打赏
  • 举报
回复
你理解的很好,应该就是这样的,在此之前我以测试通过,很感谢你能有你的看法。让我更深入一些。
leochen_career 2017-07-05
  • 打赏
  • 举报
回复
以下为个人理解,没用过这个方法 该方法的解释是:Duplicates the socket reference for the target process, and closes the socket for this process. Parameters targetProcessId Type: System.Int32 The ID of the target process where a duplicate of the socket reference is created. Return Value Type: System.Net.Sockets.SocketInformation The socket reference to be passed to the target process. 我的理解是:比如进程A创建了一个套接字,这个套接字(内核中有一个套接字引用,比如k表示。内核空间是进程共享的,也就是这个k,所以的进程其实都可以访问到的)在进程A中的fd为fd1(内核在fd1和k之间存在映射,这个映射是绑在A进程上的)。此时如果我想在B进程用这个套接字,那么我调用DuplicateAndClose(B)后,会返回给我一个info信息,此info进行中包含了我可以在进程B中使用的信息,比如里面有一个fd2.到这个时候,A进行就不能用fd1了(因为内核将映射关系由k和fd1映射改为了k和fd2映射)。当然,A也不能用fd2。此时,如果A进行将info信息(包含fd2信息)通过进程间通信给B进程,那么B进行就可以使用fd2进行socket操作了。

4,387

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧