我目前正在修改Dennis Bush的UFTP(http://uftp-multicast.sourceforge.net)以滿足我的需求。我目前正在嘗試做的是更改客戶端發送COMPLETE消息的地址。我希望修改後的UFTP版本的客戶端能夠多播COMPLETE消息,而不是將其單播回服務器,因爲我需要多播組中的每個客戶端都能夠看到發送的COMPLETE消息,而不僅僅是服務器。errno 97 aka EAFNOSUPPORT又名可能的原因地址族不支持協議
UFTP的作者告訴我,我應該修改client_transfer.c,線359,nb_sendto()函數調用,第5參數到結構包含私有組播地址和端口,而我要發送的完成。不幸的是,我得到了「不受協議支持的地址族」錯誤。該代碼段原本是這樣的:
if (nb_sendto(listener, outpacket, payloadlen, 0,
(struct sockaddr *)&group_list[listidx].replyaddr,
sizeof(struct sockaddr_in)) == SOCKET_ERROR) {
sockerror(group_list[listidx].group_id, group_list[listidx].file_id,
"Error sending COMPLETE");
} else {
log(group_list[listidx].group_id, group_list[listidx].file_id,
"COMPLETE sent");
}
set_timeout(listidx);
free(buf);
free(encrypted);
我當前的代碼如下所示:
if (nb_sendto(listener, outpacket, payloadlen, 0,
////modified line:
(struct in_addr *)&group_list[listidx].multi.s_addr, //struct in_addr multi;
////end of modified line
sizeof(struct sockaddr_in)) == SOCKET_ERROR) {
sockerror(group_list[listidx].group_id, group_list[listidx].file_id,
"Error sending COMPLETE");
} else {
log(group_list[listidx].group_id, group_list[listidx].file_id,
"COMPLETE sent");
}
set_timeout(listidx);
free(buf);
free(encrypted);
的錯誤是,對我來說,很模糊。這究竟意味着什麼?造成這種錯誤的可能原因是什麼?有人能指出我正確的方向嗎?
好吧...首先,它看起來像我使用不兼容的類型(in_addr!= sockaddr_in)...無論如何,我想知道更多關於errno 97 – deinocheirus