【发布时间】:2015-05-09 15:10:03
【问题描述】:
我已经看到这些关于描述符传递 SO 的问题。
- Descriptor passing with unix domain sockets
- Sending file descriptor over UNIX domain socket, and select()
我编写了以下两个程序来使用 Unix 域套接字
打算用作
主程序接受所有客户端连接并将这些描述符发送到正在运行的服务程序(描述符接收器)。描述符接收器recvs描述符并将它们设置为fd_set and use select以检查描述符是否可以读取,如果它准备好读取然后读取描述符放入缓冲区并将字符串长度发送给客户端。
Note : I am testing using telnet on ubuntu 14.10
这个程序的主要问题是 FD_ISSET() return false 即使描述符已准备好读取,即 Select() 仍在等待。
有时它会起作用,在这种情况下,它接收到很少的消息并挂起。
我已经尝试了所有三种类型的发送和接收描述符函数,但它们都没有完美地工作。
如何解决这个错误?
【问题讨论】:
-
请注意,
recv()不一定会收到与告知的一样多的数据,但很少。如果字节数很重要,总是检查返回的值。 -
没关系,但至少它应该接收几个字节
-
另外代码并不总是测试
recvmsg()是否返回0。 -
@alk 我拥有所有三个功能,它们都不起作用。你可以看到第一个函数也这样做。
标签: c++ linux sockets unix unix-socket