我想知道如果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 socket
、man 2 send
和 man 2 receive
。
所有引用的手册页均来自“Linux 程序员手册”。
关于c - send()和recv()是否实现可靠的数据传输(TCP协议(protocol))?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43876296/