void SendStr(int connfd, std::string str)
{
uint16_t *len = new uint16_t(str.size());
const char * lenByte = (char *)len;
char *sendByte = new char[*len + 2]{0};
memcpy(sendByte,lenByte,sizeof(*len));
memcpy(sendByte + 2, str.c_str(), *len);
std::cout << "str size " << *len << std::endl;
//std::cout << "len size " << sizeof(len) << std::endl;
size_t nleft = *len + 2;
std::cout << "need to send " << nleft << std::endl;
int nsend = 0;
while (nleft > 0)
{
//std::cout << "sending " << nleft << "bytes" << std::endl;
if (nsend = (write(connfd, sendByte + nsend, nleft)) < 0)
{
if (errno == EINTR)
continue;
ERROR_EXIT("send");
}
else if (nsend == 0)
//continue;
break;
nleft -= nsend;
std::cout << "sended " << nsend << " left " << nleft << std::endl;
}
std::cout << "send complete" << std::endl;
delete[] sendByte;
delete len;
}
这里是完整的代码
我看到write和send函数返回字节数的和,而这里返回0,并且客户端似乎运行正常,这让我很困惑。
你看到的不对。
在这份声明中
if (nsend = (write(connfd, sendByte + nsend, nleft)) < 0)
将(write(connfd,sendByte+nsend,nleft))<0
的比较结果与nsend
进行比较。如果条件为true,则该值将变为1
,如果条件为false,则该值将变为0
。看来你误解了这个比较结果是字节的总和。
如果要将从write
返回的内容分配给nsend
然后进行比较,则应该是这样的:
if ((nsend = write(connfd, sendByte + nsend, nleft)) < 0)
补遗:write
在套接字上返回0的唯一方法是,如果nleft
为0。
当某个对象具有装箱类型属性时,该属性的getter返回。但是这应该返回,因为boxed type属性的默认值是。这里有什么问题?
问题内容: 在Python 2.6中查看Queue.py时,我发现这个结构有点奇怪: 如果maxsize为0,则队列永远不会满。 我的问题是在这种情况下如何运作?如何0 < 0 == 0被认为是错误的? 问题答案: 我相信Python对关系运算符的序列有特殊的处理方式,以使范围比较易于表达。能说比说好得多。 这些称为链接比较。这是他们文档的链接。 在您谈论的其他情况下,括号会强制在一个关系运算符之
我知道(-0==0)是真的。我很想知道为什么-0 当我在stackoverflow执行上下文中运行这段代码时,它返回。 但是当我在浏览器控制台中运行相同的代码时,它返回。那是为什么呢?我试图在谷歌上搜索它,但没有找到任何有用的东西。这个问题可能不会给某个人的实际例子增加价值,我想了解JS是如何计算它的。
问题内容: 我有这样的事情: 而且我总是得到“时钟周期为:0-0”的输出 知道为什么会这样吗? (仅给出一点点细节,something_else()函数使用蒙哥马利表示法执行从左到右的求幂运算,而且我不确定不确定something_else()函数确实花费了一些不可忽略的时间。) 这是在Linux上。uname -a的结果是: 问题答案: 该功能不测量CPU时钟周期。 C说: “ 从实现定义的仅与
问题内容: 为什么以下返回0? 问题答案: 月份从0(一月)到11(十二月)进行编号。 参考:
1.场景描述:设备向Netty服务器发送数据(大约##20ms间隔##),Netty服务器向客户端转发消息##立即##(IOS或Android)。2.关联业务代码CTX.WriteAndFlush(msg) 3.发出网络服务器可以及时接收设备数据,网络服务器也可以及时将数据写入套接字缓冲区。但Netty客户端收到消息时延!!!(如5s时延) 4.服务器带宽配置入站100M/bps位/秒。出站5M/