2010-02-11 3 views
2

Я получаю errno==49 (EADDRNOTAVAIL) при попытке UDP-bind() до 127.0.0.1:47346 под управлением Mac OS X на G5 (большой эндиан PowerPC). Что-то мешает мне сделать это? Я пробовал другие адреса и порты (192.168.1.2 и порт 47346), но безуспешно.EADDRNOTAVAIL при привязке 127.0.0.1 на localhost?

Вот GDB распечатку моего sockaddr_in:

$1 = { 
    sin_len = 0 '\0', 
    sin_family = 2 '\002', 
    sin_port = 47346, 
    sin_addr = { 
    s_addr = 3232235778 
    }, 
    sin_zero = "???\000\000??" 
} 

ответ

8

Вы должны заполнить sin_len поле, а также (с SizeOf (STRUCT sockaddr_in), что следует сделать трюк). Это поле не появляется на каждой платформе, но на котором оно существует, оно должно быть заполнено.

Более того, обязательно используйте bzero структуру перед ее использованием (но, похоже, вы все равно это сделали).

+0

Спасибо, gazillion! –

+0

Это сработало и для меня! Эмпирически вам нужно bzero структуры, или 'bind' все равно будет терпеть неудачу. –

+0

Установка длины не имела эффекта, обнуление структуры работало для меня. В моем случае это был сторонний код, и я полностью его не замечал. Благодаря! – nevelis

Смежные вопросы