TCP server有关缓冲区的问题

小呀小二笙 小呀小二笙 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
//server.cpp
出问题的一段:
printf("==========waiting for client's request==========\n");
if ((acceptfd = accept(listenfd, (struct sockaddr*)NULL, NULL)) == -1) {
printf("accept socket error: %s(errno: %d)\n", strerror(errno), errno);
}
else
{
printf("accept sucess\n");
int rcvbuf_len = 0;
socklen_t len = sizeof(rcvbuf_len);
if (getsockopt(acceptfd, SOL_SOCKET, SO_RCVBUF, &rcvbuf_len, &len) < 0) {
perror("getsockopt: ");
}
printf("the recv buf len: %d\n", rcvbuf_len);
}
char recvmsg[246988] = {0};
ssize_t totallen = 0;
while (1) {
sleep(1);
ssize_t readlen = read(acceptfd, recvmsg, sizeof(recvmsg));
printf("readLen: %d\n", readlen);
if (readlen < 0) {
perror("read: ");
return -1;
}
else if (readlen == 0) {
printf("read finish: len = % ld\n", totallen);
close(acceptfd);
return 0;
}
else
{
totallen += readlen;
}
}


//client.cpp
客户端向服务端发送4个包,每个包中发送246988Byte:
ssize_t writelen;
char sendmsg[246988] = {0};
int count = 0;
while (1)
{
++count;
if (count == 5) {
return 0;
}
writelen = write(connfd, sendmsg, sizeof(sendmsg));
if (writelen < 0) {
printf("write error\n");
close(connfd);
return 0;
}
else
{
printf("write success, writelen: %d\n", writelen);
}
}


然后所得结果:




然后我测了一下ubuntu 18.04的默认缓冲区是87380Byte,然后就想知道这个为什么是1062000?
...全文

相关推荐

评论 2
收藏 已收藏
分享
返回顶部