进程间传递描述符二
发送、接收描述符
发送描述符
经过了前面的准备工作,是时候发送描述符了,先来看看函数原型:
int write_fd(int fd, void *ptr, int nbytes, int sendfd);
参数说明如下:
@fd :发送 TCP 套接字接口;这个可以是使用socketpair返回的发送套接字接口
@ptr :发送数据的缓冲区指针;
@nbytes :发送的字节数;
@sendfd :向接收进程发送的描述符;
函数返回值为写入的字节数, <0 说明发送失败;
废话少说,代码先上,发送描述符的代码相对简单一些,说明见代码内注释。
先说明一下,旧的 Unix 系统使用的是 msg_accrights 域来传递描述符,因此我们需要使用宏 HAVE_MSGHDR_MSG_CONTROL 以期能同时支持这两种版本。
接收描述符
发送方准备好之后,接收方准备接收,函数原型为:
int read_fd(int fd, void *ptr, int nbytes, int *recvfd);
参数说明如下:
@fd :接收 TCP 套接字接口; 这个可以是使用 socketpair返回的接收套接字接口
@ptr :接收数据的缓冲区指针;
@nbytes :接收缓冲区大小;
@recvfd :用来接收发送进程发送来的描述符;
函数返回值为读取的字节数, <0 说明读取失败;
接收函数代码如下,相比发送要复杂一些。
发送和接收函数就这么多,就像上面看到的,进程间传递套接字还是有点麻烦的。Linux的就介绍完了,后面在简单说说Windows是如何传递的,话说MSDN真的方便哪。