Общие сокеты Lisp

В частности, используя 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))))

person Joshua    schedule 26.06.2015    source источник


Ответы (1)


оказывается, зависание было на вызове чтения, потому что.... мне нужно (stream-force-output) после вызова записи. проверено и работает. Сокеты также, похоже, не закрываются без явных вызовов (close для lsock, tsock и потока... Интересно, это ошибка? Другой вопрос.

person Joshua    schedule 26.06.2015