當我recvfrom(),收到的消息是正確的,但源地址是一團糟, 爲什麼會發生這種情況?recvfrom()得到錯誤的源地址
char traid_messageR[MAXDATASIZE];
socklen_t addlen;
struct sockaddr_in source_addr;
if((numbytes=recvfrom(udp_sockfd, traid_messageR, 256, 0, (struct sockaddr*)&source_addr, &addlen)) == -1)
{
perror("recvfrom");
exit(1);
}
的結果是這樣的:
(gdb) print source_addr
$1 = {sin_family = 61428, sin_port = 42, sin_addr = {s_addr = 49809},
sin_zero = "\234\352\377\277\310\352\377\277"}
的49809看起來像一個端口號,但正是這種接收器的端口號......沒有任何一個有想法,爲什麼是這樣的感謝?很多 哦,另一件事,我用select()循環,IF_ISSET(und_socked,%fds),然後優於上面的代碼,這會影響?
耶,分配值addlen後,它的工作原理,由我不明白安靜,不addlen假設recvfrom的過程中被改變了嗎?爲什麼我需要首先爲其分配價值? – user2810081