2011-06-11 25 views
3

sockopt-reuse-address的調用似乎不起作用。SBCL插座:重新使用地址

(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] 

我在做什麼錯?

+1

我給了SO_REUSEPORT的實現的賞金。 (其實這是我的第一個賞金,我只想看看它是如何工作的) – whoplisp 2011-07-05 00:12:31

回答

2

你可以試試IOLib,其make-socket函數似乎支持:reuse-address關鍵字。據我所知,IOLib沒有利用Lisp實現的內置網絡功能,因此即使沒有SBCL直接支持該功能,它也可能工作。

雖然我沒有測試過它。