请教:进程间如何共享fd?

现在我想做这样一件事情,进程A负责监听端口获得SOCKET的fd,这时进程B负责通过此fd发送数据,我建立了一个共享内存保存进程A 获得的fd,进程B可以通过共享内存获得此fd,但是用不了,好像记得fd是进程私有的,有没有别的方法呢?

对,fd是进程私有的。

标准的UNIX做法,是A获得fd以后,fork()或者spawn()进程B,把fd继承过去。可以去找inetd的源码来看看。

我现在改成多线程了,一个线程负责监听获得fd,一个线程负责发送数据,但是有一个奇怪的现象,正常发送数据时一切正常,但是当客户端断开时,用send(fd,…)会导致进程异常推出,send()函数没有任何返回值,这是为什么呢?fd是我定义的一个全局变量

试试处理 SIGPIPE.

在程序开头加一句:
signal(SIGPIPE, SIG_IGN);