关于UNIX 网络编程中存在的疑惑。先写下来,等待解决
2009-03-04 16:01
363 查看
2-11 UDP Output
A UDP socket has a send buffer size (which we can change with the SO_SNDBUF socket option, Section 7.5), but this is simply an upper limit on the maximum-sized UDP datagram that can be written to the socket. If an application writes a datagram larger than the socket send buffer size, EMSGSIZE is returned.
在这段话中,我进行了试验。
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
int nRes = 0;
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("172.16.1.32");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
int rcvbuf = 1024;
int optlen = sizeof(rcvbuf);
nRes = setsockopt(sockClient,SOL_SOCKET,SO_SNDBUF,(char *)&rcvbuf,sizeof(int));
if (SOCKET_ERROR == nRes)
{
printf("Client setsockopt error :%d /n",GetLastError());
}
char szSendBuf[10000] = "Hello";
nRes = sendto(sockClient,szSendBuf,10000,0,
(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
if (nRes == SOCKET_ERROR)
{
printf("send err..");
}
但是,实际上的结果(调试结果却意外的是):sendto 成功,并实际发送了 10000个字节。按照上面的内容来说,应该是 返回 EMSGSIZE。为什么?
7-5 SO_RCVBUF and SO_SNDBUF Socket Options
The receive buffers are used by TCP, UDP, and SCTP to hold received data until it is read by the application.With TCP, the available room in the socket receive buffer limits the window that TCP can advertise to the other end。
设置SERVER端的 接收缓冲区大小为 10240字节之后,但是,从抓到的数据包来看。(MSS = 1460) 通告对方的窗口大小仍然为 65535 。为什么?
7-5 SO_RCVLOWAT and SO_SNDLOWAT Socket Options
UDP does not have a send buffer; it has only a send buffer size. 对于这句话,又当如何理解?
A UDP socket has a send buffer size (which we can change with the SO_SNDBUF socket option, Section 7.5), but this is simply an upper limit on the maximum-sized UDP datagram that can be written to the socket. If an application writes a datagram larger than the socket send buffer size, EMSGSIZE is returned.
在这段话中,我进行了试验。
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
int nRes = 0;
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("172.16.1.32");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
int rcvbuf = 1024;
int optlen = sizeof(rcvbuf);
nRes = setsockopt(sockClient,SOL_SOCKET,SO_SNDBUF,(char *)&rcvbuf,sizeof(int));
if (SOCKET_ERROR == nRes)
{
printf("Client setsockopt error :%d /n",GetLastError());
}
char szSendBuf[10000] = "Hello";
nRes = sendto(sockClient,szSendBuf,10000,0,
(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
if (nRes == SOCKET_ERROR)
{
printf("send err..");
}
但是,实际上的结果(调试结果却意外的是):sendto 成功,并实际发送了 10000个字节。按照上面的内容来说,应该是 返回 EMSGSIZE。为什么?
7-5 SO_RCVBUF and SO_SNDBUF Socket Options
The receive buffers are used by TCP, UDP, and SCTP to hold received data until it is read by the application.With TCP, the available room in the socket receive buffer limits the window that TCP can advertise to the other end。
设置SERVER端的 接收缓冲区大小为 10240字节之后,但是,从抓到的数据包来看。(MSS = 1460) 通告对方的窗口大小仍然为 65535 。为什么?
7-5 SO_RCVLOWAT and SO_SNDLOWAT Socket Options
UDP does not have a send buffer; it has only a send buffer size. 对于这句话,又当如何理解?
相关文章推荐
- 网络编程----心得体会(一篇解决你大部分疑惑的文章)
- ios调用unix 网络编程的socket 接口实行UDP通信, 锁屏后解屏会闪退的解决方法
- window下udp网络编程存在的问题-socket error 10054解决方法
- 关于UNIX高性能网络编程的几篇不错的文章
- 关于引用网络echarts.js报错的问题解决方法
- 关于linux网络编程总结
- think in java第十五章关于网络编程的读书笔记
- 关于正则,那些年一直存在的疑惑解答(正则菜鸟不容错过)
- 海思板子利用unixctl socket网络编程,进行接口请求和cJSON解析之二
- 关于win7中HP LaserJet 1022n网络打印机重复打印的问题解决
- 关于java网络编程
- unix下网络编程之I/O复用(二)
- Java学习疑惑(7)----网络编程, 详解TCP与UDP两者之间的共同点和差异
- iOS网络编程-解决iCloud文档存储过程中文档冲突问题
- 第一篇:《UNIX 网络编程 第二版》编译环境的搭建
- 关于解决在win10无线局域网环境下VMware虚拟机中的CentOS6.5系统连接网络的问题
- unix编程---网络I/O模型
- 关于网络编程中MTU、TCP、UDP优化配置的一些总结
- unix socket function网络编程API大全
- 转一篇关于3.5的高效网络编程方案