`recv`是否与字节或八位字节一起使用,或者它们在POSIX文档的上下文中是否相同?

时间:2011-11-12 19:55:35

标签: c sockets posix porting c99

http://pubs.opengroup.org/onlinepubs/009695399/functions/send.html读取套接字send的POSIX参考我想知道,它们究竟是什么意思“字节” - 它的传统/历史含义,隐含/流行含义,还是完全不同的东西?我正在开发一个二进制TCP / IP支持的网络协议客户端 - 服务器程序,我想正确声明我用来传递给recv的缓冲区,并能够正确解压缩其数据。

是的,我知道这几乎是一个假设的问题,可能有一百万人有机会遇到真正的问题,但是我觉得比安慰更安全。

那么,POSIX的人是否真的意味着八位字节,或者他们是否真的暗示对于一个字节说的平台,7位,send将处理粒度为7 * N的数组?或者它可能只是逐位传输所有数据(大小粒度(7 * n_bytes)位)?我的意思是,因为它需要一个void *缓冲区......

我的recv缓冲区的哪个声明在架构和编译器中最稳定?

我正在使用带有以下标志的GCC(C99,POSIX):

cc -g -Wall -Wextra -std=c99 -pedantic -fexec-charset=ISO-8859-1 -DDEBUG -D_POSIX_C_SOURCE

2 个答案:

答案 0 :(得分:2)

我认为该字节是C的char类型,是系统支持的最小可能的小整数。 (也许一些奇怪的编译器+目标系统确实有非8位char)。

octet表示8位字节。

如果您考虑TCP / IP,我相信(IIRC)它以8位字节的形式定义了各种协议。 TCP由多个8位字节的传输组成。

但实际上,你不应该那么在意。也许用比特来记录你的协议可能有所帮助。很多事情都会使你的协议过时(只考虑IPv6)。如果你的协议非常有价值和有用,并且有很好的文档记录,那么有人会让它生动并适应它。

答案 1 :(得分:2)

POSIX将字节定义为八位字节的大小,并将八位字节定义为8个连续位。这个定义在POSIX标准的第3章中,最新的POSIX标准(2008)在http://pubs.opengroup.org/onlinepubs/9699919799/

相关问题