Unix 域套接字:发送文件描述符和 select()

Unix domain socket : sending file descriptor and select()

本文关键字:select 描述 文件 套接字 Unix      更新时间:2023-10-16

我已经看到过这些问题关于描述符传递SO。

  • 使用 unix 域套接字传递的描述符
  • 通过 UNIX 域套接字发送文件描述符,然后选择()

我写了以下两个程序来与Unix域套接字一起使用

  • 主程序
  • 描述符接收器

旨在用作

主程序接受所有客户端连接,并将这些描述符发送到正在运行的服务程序(描述符接收器)。描述符接收器 recvs 描述符并将它们设置为 fd_set and use select 以检查描述符是否可读,如果它已准备好读取,然后将描述符读入缓冲区并将字符串长度发送到客户端。

Note : I am testing using telnet on ubuntu 14.10

该程序的主要问题是,即使描述符已准备好读取,即 Select() 仍在等待FD_ISSET() return false。有时它可以工作,在这种情况下,它会接收很少的消息并挂起。

我已经尝试了所有三种风格的发送和 recv 描述符函数,但没有一个完美运行。

如何解决此错误?

我花了很多时间在上面的代码中找到错误。它是在第 153 行的描述符接收器中,我忘了计算 recvd 描述符的最大值。