我想通过端口9100上的TCP与联网的打印机通信。我想从套接字读取信息,以查看打印机是否发出任何初始消息,发送要打印的内容,然后再次从套接字读取以查看是否打印机在关闭插槽之前会做出任何响应。
问题是打印机在会话开始和结束时可能会说不出话。因此,如果我使用阻塞套接字,那么当打印机无话可说时,当我进行初始读取时,它可能会挂起(或者在这种情况下我可以依靠read()返回0字节吗?)。
这样做是使用非阻塞套接字然后使用超时来决定何时停止读取的正确方法吗?换句话说,要做到这一点:
(1)进入读取循环并在10秒内没有读取任何内容时中断
(2)发送要打印的数据
(3)再次进入读取循环,如果10秒钟之内没有读取任何内容,则会中断
这样做似乎有点骇人听闻,而且也很烦人,因为这会强制用户延迟20秒。
我的代码现在读取的方式是,我从套接字读取0字节后就停止尝试读取,但是我担心的是,这可能会导致套接字挂起,或者在读取之前过早地退出读取循环。打印机有机会写一条消息。