利用 select 系統呼叫開發類似 traceroute 的程式。 回憶 lab0 中瀏覽器的段落
man 文件說他可以同時讀取多個 descripter ,這是一個標準函式類似 printf 。另外,都叫作 traceroute ,本質上當作類似 ip 版的 google 地圖,利用行程規劃來想,就有點類似了。而且節點間,都必須距離近,有網路(道路)連接節點。
int ret = select(AAAA, BBBB, NULL, NULL, &timeout);
if (ret <= 0)
return ret;
考慮 FD_SET 是把前者加到後者,AAAA 應為 recv_sock + 1 仿造 lab0 網頁伺服器。BBBB = &readfds 為 descripter 的集合。
static uint8_t rand_range_256(void)
{
return (uint8_t) (random64() >> CCCC);
}
唉,就是一個除法產生 0~256,那就是 257 囉。阿不是,是要取最高位數前八位,所以是 64-8 = 56。
uintptr_t os_random(uintptr_t seed)
{
uintptr_t x = (uintptr_t) DDDD ^ seed;
根據教材 提到 Address Space Layout Randomization (ASLR) 有 commit 7a51365 DDDD = &os_random 。
但讓我消化一下,讀讀為什麼是這樣子。