Сокеты SBCL: адрес повторного использования - PullRequest
3 голосов
/ 11 июня 2011

Звонок на 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 ]

2 голосов
/ 06 июля 2011

Вы можете попробовать IOLib , чья функция make-socket поддерживает ключевое слово :reuse-address. Насколько я помню, IOLib не использует встроенную сетевую функциональность реализации Lisp, поэтому может работать даже без SBCL, напрямую поддерживающей эту функцию.

Хотя я не проверял.

1 голос
/ 11 июня 2011

См. в этой теме в sbcl-help.

...