Пару дней назад я столкнулся со странной ошибкой, связанной с struct sockaddr_un. Подробнее об этом можно прочитать здесь.
Через некоторое время я также нашел решение этой ошибки, которое заключалось в том, что memset устанавливал всю переменную целиком. Теперь мой вопрос, как уже задано в одном посте на той стороне, почему?
Почему мне нужно установить всю локально, а не динамически выделяемую переменную в 0, даже если я установил для каждого члена допустимое и правильное значение?
В других структурах (например, struct sockaddr_in) это переменная, которая используется в качестве заполнения, чтобы внутренне выглядеть так же, как struct sockaddr. >. Вы должны заполнить (или, может быть, не должны? Пожалуйста, поправьте меня) эту переменную с 0, чтобы программа работала правильно в любое время.
Кроме того, где я могу просмотреть исходный код, например, connect()? Может ли быть так, что функция connect() реализована неаккуратно? Или я упускаю некоторые основы?
Заранее спасибо.
struct sockaddr_un sa; sa.sun_family = AF_UNIX; strncpy(sa.sun_path, mypath, sizeof(sa.sun_path)-1); connect(fd, sa, sizeof(sa));
должен выполнить инициализацию и настройку соединения. Если вы получаетеEINVAL
, что-то пошло не так до запуска фрагмента кода, показанного выше. - person alk   schedule 04.08.2012... connect(fd, &sa, sizeof(sa));
- person alk   schedule 04.08.2012