2010-02-11 51 views
2

我試圖在UDP-bind()到127.0.0.1:47346上運行G5(大端PowerPC)上的Mac OS X時,我得到errno==49 (EADDRNOTAVAIL)。有什麼阻止我這樣做嗎?我試過其他地址和端口(192.168.1.2和端口47346),但沒有成功。在localhost上綁定127.0.0.1時EADDRNOTAVAIL?

這裏是我的sockaddr_in的gdb的打印輸出:

$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(結構sockaddr_in中),應該做的伎倆)。這個字段沒有出現在每個平臺上,但是它存在的地方,它必須被填充。

此外,在使用它之前一定要使用bzero結構(但它顯然看起來你是這麼做的)。

+0

感謝gazillion! – 2010-02-11 15:41:11

+0

這對我也有效!根據經驗,您需要將結構設置爲bzero,否則「綁定」將會失敗。 – 2011-02-13 02:08:43

+0

設置長度沒有效果,調整爲我工作的結構。在我的情況下,這是第三方代碼,我完全忽略了這一點。謝謝! – nevelis 2011-09-03 05:35:08

相關問題