我正在阅读 Comer 的 Internetworking with TCP/IP Vol III。
我正在查看 UDP 的“TIME”客户端的一些示例代码。
代码到达读取响应的位置,它需要 4 个字节并将其转换为 32 位无符号整数,因此可以将其转换为 UNIX 时间。
“n”是一个文件描述符,指向一个侦听 UDP 的套接字。
n = read (s, (char *)&now, sizeof(now));
if (n < 0)
errexit("read failed: %s\n", strerror(errno));
now = ntohl((u_long)now); /* put in host byte order */
我想知道的是:
在进行转换之前是否应该检查一些假设?这是在 C 语言中,我想知道是否存在 read 传递的字节数不是 4 的情况。如果是这样,“现在”似乎会一团糟。
“现在”定义为:
time_t now; /* 32-bit integer to hold time */
所以也许我不理解“time_t”的性质,或者字节如何在 C 中传递,或者 UDP 在什么情况下会向文件描述符返回错误的字节数......
提前致谢。