大佬教程收集整理的这篇文章主要介绍了为什么在套接字中发送函数返回 0,但客户端确实收到了消息?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
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;
}
完整代码为here
看到write和send函数返回字节的总和,而这里返回0,客户端好像运行正常,搞糊涂了。
你看到的是错误的。
在本声明中
geTinformation(Name) {
var data = {
sName: name
};
return instance
.get('/getSeason/',data)
.then((res) => {
console.log(res);
});
}
'Content-Type': 'application/json',
的比较结果被赋值给 updatE table_a ta
SET missing = true
WHERE NOT EXISTS ( SELECT 1 from table_b tb WHERE ta.guid = tb.guid );
。如果条件为真,这将变为 if (nsend = (write(connfd,sendByte + nsend,nleft)) < 0)
,如果条件为假,则变为 (write(connfd,nleft)) < 0
。看来你把这个比较结果误解为字节的总和了。
如果要将nsend
返回的内容赋值给1
然后比较,应该是这样的:
0
附录:write
在套接字上返回 0 的唯一方法是 nsend
为 0。
以上是大佬教程为你收集整理的为什么在套接字中发送函数返回 0,但客户端确实收到了消息?全部内容,希望文章能够帮你解决为什么在套接字中发送函数返回 0,但客户端确实收到了消息?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。