常见的 Lisp 套接字
Common Lisp sockets
具体使用 ccl,我试图在同一个程序中设置两个套接字作为 fifo 数据结构。
为此,我一直在站着测试代码来锻炼我对api的理解,现在我有一个问题我想不通。下面的代码片段设置了两个套接字,一个监听,一个连接到监听,并在监听套接字上接受连接(accept 调用在返回之前等待连接进来,这就是我在这种情况下想要的) ,之后我们写入一个套接字并从另一个套接字读取。代码挂起,我不知道为什么(我猜是因为套接字没有连接)。
代码:
(ccl:with-open-socket (lsock :local-port 8008 :connect :passive :address-family :internet)
(ccl:with-open-socket (tsock :address-family :internet :remote-port 8008 :remote-host "127.0.0.1")
(let ((stream (ccl:accept-connection lsock)))
(write "can you see?" :stream tsock)
(read stream))))
原来挂起是在读取调用上,因为...我在写入调用后需要 (stream-force-output)。测试和工作。套接字似乎也不会在没有显式调用的情况下关闭(关闭 lsock、tsock 和流......我想知道这是否是一个错误?不同的问题。
具体使用 ccl,我试图在同一个程序中设置两个套接字作为 fifo 数据结构。
为此,我一直在站着测试代码来锻炼我对api的理解,现在我有一个问题我想不通。下面的代码片段设置了两个套接字,一个监听,一个连接到监听,并在监听套接字上接受连接(accept 调用在返回之前等待连接进来,这就是我在这种情况下想要的) ,之后我们写入一个套接字并从另一个套接字读取。代码挂起,我不知道为什么(我猜是因为套接字没有连接)。
代码:
(ccl:with-open-socket (lsock :local-port 8008 :connect :passive :address-family :internet)
(ccl:with-open-socket (tsock :address-family :internet :remote-port 8008 :remote-host "127.0.0.1")
(let ((stream (ccl:accept-connection lsock)))
(write "can you see?" :stream tsock)
(read stream))))
原来挂起是在读取调用上,因为...我在写入调用后需要 (stream-force-output)。测试和工作。套接字似乎也不会在没有显式调用的情况下关闭(关闭 lsock、tsock 和流......我想知道这是否是一个错误?不同的问题。