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