C++ Unix域套接字:发送文件描述符并选择()

C++ Unix域套接字:发送文件描述符并选择(),c++,linux,sockets,unix,unix-socket,C++,Linux,Sockets,Unix,Unix Socket,我已经看到这些问题在描述符上如此传递 为了使用Unix域套接字,我编写了以下两个程序 其目的是作为 主程序接受所有客户端连接,并将这些描述符发送到正在运行的服务程序(描述符接收器).Descriptor recvs Descriptor并将其设置为fd\u set,然后使用select检查描述符是否可读(如果已准备好读取),然后将描述符读入缓冲区并向客户端发送字符串长度 注意:我正在ubuntu 14.10上使用telnet进行测试 这个程序的主要问题是,FD_ISSET()返回

我已经看到这些问题在描述符上如此传递

为了使用Unix域套接字,我编写了以下两个程序

其目的是作为

主程序接受所有客户端连接,并将这些描述符发送到正在运行的服务程序(描述符接收器).Descriptor recvs Descriptor并将其设置为
fd\u set,然后使用select
检查描述符是否可读(如果已准备好读取),然后将描述符读入缓冲区并向客户端发送字符串长度

注意:我正在ubuntu 14.10上使用telnet进行测试

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

我已经尝试了所有三种类型的send和recv描述符函数,但它们都不能完美地工作


如何解决此错误?

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

请注意,
recv()
接收的数据不一定像它被告知的那样多,但很少。如果字节数很重要,请始终检查返回的值。这没问题,但至少应该接收几个字节。代码并不总是测试
recvmsg()
return
0
@alk我有所有三个函数,它们都不起作用。您可以看到第一个函数也这样做。