我有一个服务器程序,该程序处理音频数据并将其传递给音频驱动程序。
服务器程序将复制音频数据,并将复制的内容放入秒线程中的命名FIFO中。
如果没有客户端在FIFO的另一侧进行读取,则没有关系,因为它只是阻塞了FIFO线程。
现在,我想添加一个“控制”功能,例如“增加音量,播放更快等”。因此最终连接的客户端可以控制服务器程序。
重要的是:如果客户端最终断开连接(通过close()或中止),则服务器已检测到此情况,因此应退回到正常模式,并忘记了来自客户端的所有命令。
到目前为止,我从未使用过套接字,所以我不确定什么是最好的方法:
使用服务器->客户端中的FIFO并添加仅用于客户端->服务器通信的套接字?
使用一个套接字流服务器->客户端,并从客户端->服务器发出命令(字节格式?)
我将对套接字使用“ AF_UNIX,SOCK_STREAM”。 #2是更好的变体吗?以及如何确定客户端是否在没有close()的情况下断开连接?
最佳答案
我投票给nr.2选项,可能的解决方案是:
1-创建套接字[sock_stream ....];
2-fork()[继承套接字描述符];
-father[use to read];
-son[use to write];
您可以实现从套接字描述符的read()返回0bytes时检测到客户端断开连接
关于c - 更好的方法是:1个管道和1个 socket ,还是1个 socket ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16419466/