SBCL套接字:重用地址

时间:2011-06-11 00:57:15

标签: sockets lisp common-lisp sbcl

sockopt-reuse-address的调用似乎没有效果。

(setf socket (make-instance 'sb-bsd-sockets:inet-socket 
                            :type type :protocol protocol)
(setf (sb-bsd-sockets:sockopt-reuse-address socket) t)
(setf (sb-bsd-sockets:non-blocking-mode socket) t)
(sb-bsd-sockets:socket-bind socket ip port)
(sb-bsd-sockets:socket-listen socket backlog)

尝试重新绑定到同一端口会引发以下错误:

Socket error in "bind": EADDRINUSE (Address already in use)
   [Condition of type SB-BSD-SOCKETS:ADDRESS-IN-USE-ERROR]

我做错了什么?

2 个答案:

答案 0 :(得分:2)

您可以试用IOLib,其make-socket函数似乎支持:reuse-address关键字。据我所知,IOLib没有使用Lisp实现的内置网络功能,所以即使没有SBCL直接支持该功能,它也可以工作。

我还没有测试过它。

答案 1 :(得分:1)

请参阅sbcl-help上的this thread