c - send()和recv()是否实现可靠的数据传输(TCP协议(protocol))?

标签 c sockets tcp udp

我想知道如果socket处于连接状态并使用SOCK_STREAM传输,send()和recv()之间发送的数据包是否遵循可靠的TCP协议(protocol)?像ACK和seq号这样的东西可以防止数据包丢失和正确性,或者我需要自己实现TCP协议(protocol)?

另外,

如果UDP不带SOCK_DGRAM的connect(),则sendto()和recvfrom()之间发送的数据包是否采用UDP协议(protocol)? (ACK、序列号或计时器...)

最佳答案

不需要自己实现 TCP 或 UDP。

来自man 2套接字:

SOCK_STREAM Provides sequenced, reliable, two-way, connection-based byte streams.

SOCK_DGRAM Supports datagrams (connectionless, unreliable messages of a fixed maximum length).

来自man 7 tcp:

tcp_socket = socket(AF_INET, SOCK_STREAM, 0);

DESCRIPTION This is an implementation of the TCP protocol defined in RFC 793, RFC 1122 and RFC 2001 with the NewReno and SACK extensions.

来自man 7 udp:

udp_socket = socket(AF_INET, SOCK_DGRAM, 0);

DESCRIPTION
This is an implementation of the User Datagram Protocol described in RFC 768.

另请参阅 man 7 socketman 2 sendman 2 receive

所有引用的手册页均来自“Linux 程序员手册”。

关于c - send()和recv()是否实现可靠的数据传输(TCP协议(protocol))?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43876296/

相关文章:

c - Windows : How to build X264. lib 而不是 .dll

node.js - ReactJS + Socket.IO - 处理套接字连接的最佳方式

node.js - 两个http请求能走到一起吗?如果可以,nodeJS 服务器如何处理它?

java - 多线程聊天服务器

连接错误 : "No route to host"

VB.net TCPListner 窗口服务

C# SSL 连接被主动拒绝

c - 我无法让 if 语句正确执行

c++ - 无法使用#define作为传递给原型(prototype)的值,无效代码

c - 从文本文件中读取和打印输出