更好的方法是:1个管道和1个插座,还是1个插座?

时间:2013-05-07 12:47:10

标签: c sockets stream two-way

我有一个处理音频数据的服务器程序,并将其传递给音频驱动程序。

服务器程序复制音频数据并将副本放入秒线程中的命名FIFO中。

如果FIFO的另一端没有客户端读取则无关紧要,因为它只会阻塞FIFO线程。

现在我想添加一个“控制”功能,如“增加音量,播放更快等”。所以最终连接的客户端可以控制服务器程序。

重要的是:如果客户端最终断开连接(通过close()或abort),服务器已检测到这一点,并且应该回到正常模式并忘记来自客户端的所有命令。

我从来没有使用套接字,所以我不确定最好的方法是什么:

  1. 按原样使用来自server->客户端的FIFO并添加一个仅用于客户端与服务器通信的套接字?

  2. 使用一个套接字来流式传输server->客户端并从客户端>服务器发出命令(以字节格式?)

  3. 我会使用“AF_UNIX,SOCK_STREAM”作为套接字。 #2是更好的变种吗?如何判断客户端是否在没有close()的情况下断开连接?

1 个答案:

答案 0 :(得分:0)

我投票选项nr.2,可能的解决方案是:

1-create socket [sock_stream ....];

2-fork()[继承套接字描述符];

-father[use to read];
-son[use to write];

当套接字描述符中的read()返回0bytes时,您可以实现检测客户端断开连接

相关问题