Linux - 与套接字

时间:2018-03-06 16:44:46

标签: c linux sockets nonblocking

我已在非阻止模式模式下打开 / dev / ttyACM0

我正在使用选择来了解数据何时可用。

选择返回时,我可以通过读取功能读取串口到达的所有数据。

问题是,如果我尝试阅读更多数据,读取会返回 0

这不是正确的行为。

说明:

非阻塞模式中打开套接字时, select 会在数据可用时返回,并且可以调用 read 函数来检索数据

但是,在没有数据要读取的套接字上调用 read 将导致读取返回 -1 ,而不是 0

关联的 errno EWOULDBLOCK ,这是正确的。

在串口描述符的情况下,除了 read 在没有数据时返回 0 并且 errno 也是的 0

对于套接字,读取返回 0 表示远程已关闭其会话结束,这应该是您关闭连接本地端的时刻

实际上,串口读取返回 0 ,但端口已关闭。

有没有办法初始化通讯端口,使其行为与套接字相同?

谢谢

1 个答案:

答案 0 :(得分:0)

如果您只想从无数据中区分设备移除(从父总线拔出串行端口,例如USB或强制驱动程序卸载),请调用其结果不依赖于接收缓冲区的API。

例如,只要设备仍然存在,tcgetattr应该成功,无论是否有数据。

如果要检测串行电缆的断开,则需要硬件握手或超时。