write() 和 send() 解决错误 => 区别?

use*_*772 5 c sockets send

解决这两个函数之间的错误可能有什么区别?:
这个问题给我带来了另一个问题......字符数是否总是与字节数相同?
有关更多信息:我在 Linux 上的 C 中使用它进行 TCP 套接字通信(sys/socket.h) 感谢您的回复。

发送()
写()

返回:
write():
成功时返回写入的字节数(零表示未写入任何内容)。出错时,返回 -1,并适当设置 errno。如果 count 为零并且文件描述符引用常规文件,则将返回 0 而不会引起任何其他影响。对于特殊文件,结果不可移植。

send():
调用返回发送的字符数,如果发生错误,则返回 -1。

来自 stackoverflow 的问题说这种方法应该与使用标志零相同。
这里

int client_sockfd;
char* msg;
int length = strlen(msg); 

//first option
if(send(client_sockfd, msg, length, 0) != length) return 1;
else return 0;
//second option 
if(write(client_sockfd, msg, length) != length) return 1;
else return 0;
Run Code Online (Sandbox Code Playgroud)

Ric*_*ton 4

它们都将返回相同数量的写入字节(在本例中为 == 字符。除了注意这一点:

如果消息太长而无法通过底层协议原子传递,则会返回错误 EMSGSIZE,并且不会传输消息。

换句话说,根据写入数据的大小,write() 可能会成功,而 send() 可能会失败。