C снабжает код ошибки повышений сокетом 22, EINVAL - недействительный аргумент

Это работает просто отлично. Не нужно писать кольцевое промежуточное изделие.

(:require [clojure.java.io :as io])

(defroutes app-routes 
(GET "/" [] (io/resource "public/index.html")))
7
задан Marc Gravell 22 January 2010 в 12:18
поделиться

2 ответа

Я не вижу, где вы инициализируете clientaddrlen . Это параметр входа / выхода. Вы должны указать accept () размер буфера для адреса.

13
ответ дан 6 December 2019 в 11:52
поделиться

Добавление объявления неиспользуемой переменной при нормальных обстоятельствах не должно вызывать сбой принятия. Выбор не нарушен .

Опубликованный вами код не может работать так, как вы описываете; вы не проверяете возвращаемое значение accept (), поэтому как узнать, что это не удается? Помните, что вызовы Unix system / libc обычно не устанавливают errno , если только не возникает ошибка, поэтому, если accept () не вернет -1, errno может содержать что угодно .

Тем не менее; если вы убедились, что accept () не работает, а для errno задано значение EINVAL, есть две возможности в соответствии со страницей руководства:

  • Socket не прослушивает соединения. (Вы проверили код возврата из listen ()?)
  • Аддрлен недействителен (т.е. отрицателен)

РЕДАКТИРОВАТЬ: самое главное: опубликуйте полный пример , который компилирует и демонстрирует вашу проблему. В противном случае мы можем только догадываться, в чем проблема.

4
ответ дан 6 December 2019 в 11:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: