2 skaitiaozhan skaitiaozhan 于 2016.03.23 23:30 提问

关于linux socket描述符

我在一个进程间用socket获得connect连接过来client的连接套接字描述,比如为6,
那么我在其他进程中可以用6这个描述符与client进行通信吗?

4个回答

devmiao
devmiao   Ds   Rxr 2016.03.23 23:44
已采纳
skaitiaozhan
skaitiaozhan 回复shpanghao: 自己写的一个ftp server。我是在创建进程池后主进程做的socket,listen和accept,fd用管道传递过去。子进程不能直接用fd,昨天看了上位答主给的网址,了解了一下。
一年多之前 回复
shpanghao
shpanghao 一般都是监听socket共享吧,通信各自socket .你什么应用?
一年多之前 回复
skaitiaozhan
skaitiaozhan 。。我刚才试着用client去连接,的确建立了一条不同的TCP连接,在祖先进程中多了一条socket。大牛知道如何让子进程去获得父进程的TCP连接嘛
一年多之前 回复
skaitiaozhan
skaitiaozhan 谢答。我查到的pro文件下我的进程都共享同一个socket描述符的id,但是,我在祖先进程中接受的描述符,通过pipe管道传送到孙子进程中(仅仅是描述符,如6这种),它直接使用recv去接受该描述符的数据会返回socket operation on non-socket的errno号,按照该文描述不该如此啊
一年多之前 回复
george_xiaoqiao
george_xiaoqiao   2016.03.24 10:13

可以的,只要找一种方式,将套接字描述符给你想用的进程,他就可以拿它去跟你已经连接着的另一端(client)进行通信。

skaitiaozhan
skaitiaozhan 就是这个问题,进程间的socket连接描述符和监听描述符不共享。楼上给的网址有详细描述。
一年多之前 回复
NK_test
NK_test   Rxr 2016.03.24 12:44

unix域协议在进程间传递文件描述符

skaitiaozhan
skaitiaozhan 问题是描述符不共享。我用管道传递过去,自己做的协议,收到的fd也正确,但是不能用。
一年多之前 回复
NK_test
NK_test   Rxr 2016.03.25 10:35

对嘛,管道是不可以传递文件描述符的。两种方式可以传递:本机进程之间使用Unix域协议(socketpair),不同主机之间使用socket传递。
所以你想要不同进程之间进行通信,并且要传递文件描述符(socket也是),就要用unix域协议啦,你看看这个,还不清楚的话可以再问。http://blog.csdn.net/nk_test/article/details/49105435

skaitiaozhan
skaitiaozhan 谢答 了解了
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!