【发布时间】:2016-10-25 15:40:42
【问题描述】:
我们为 TCP/IP 连接套接字设置了以下选项。 SO_SNDBUF 和 SO_RCVBUF 选项设置的值是 10240。传递给 recv 和 send 调用的缓冲区大小是 1024。
recv 调用是否总是等待获得 1024 个字节后才返回?发送方发送大小为 1024 的数据包
发送调用是否会一直等待发送 1024 字节才返回?
在传输指定的字节之前,我是否应该设置任何其他选项来防止调用返回?
setsockopt(*p_sockwk, SOL_SOCKET, SO_REUSEADDR, (void*)&reuseaddr, (socklen_t)sizeof(socklen_t));
setsockopt(*p_sockwk, SOL_SOCKET, SO_SNDBUF, (void*)&sendbufsize, (socklen_t)sizeof(socklen_t));
setsockopt(*p_sockwk, SOL_SOCKET, SO_RCVBUF, (void*)&recvbufsize, (socklen_t)sizeof(socklen_t));
setsockopt(*p_sockwk, IPPROTO_TCP, TCP_NODELAY, (void*)&delay, (socklen_t)sizeof(socklen_t));
【问题讨论】:
-
@ErikAlapää 非常有帮助。整本书?为什么是最新版本?早期的有什么问题?请。
-
@EJP 当提出问题的人甚至没有做出最小的尝试来理解 API 和协议背后的想法时,我会很生气。对于这本书,早期版本是一些有史以来最好的编程书籍,但使用最新版本可以为您提供最新的材料,例如ipv6 和线程。
-
@ErikAlapää 推荐整本书可能会减轻您的烦恼,但实际上并不能有效地回答这个问题。
-
@EJP 一个相当聪明的人应该能够在打开这本书的 10 分钟内找到关于 TCP 套接字 recv() 的答案。就我而言,辩论结束。
-
@ErikAlapää 一个相当聪明的人应该能够在不打开甚至根本没有书的情况下找到答案。没有什么反对这本书的,但你在这里的cmets是徒劳的。