【发布时间】:2011-11-23 12:38:27
【问题描述】:
我目前在一个 C 客户端程序中使用这个函数。一切似乎都正常,但是当此客户端连接的服务器关闭时,write_all() 返回 4(即len)而不是预期的 -1。
int write_all(int sock, const void *buf, size_t len)
{
int buf_size = len;
while(len > 0)
{
int result = write(sock, buf, len);
if(result < 0)
{
if(errno == EINTR)
continue;
return result;
}
buf += result;
len -= result;
}
return buf_size;
}
这个函数有什么我遗漏的吗?我可以提前调用其他任何函数来确保服务器仍然正常运行吗?
谢谢
【问题讨论】:
-
write可能会返回0,具体取决于套接字的类型。你有想过吗? -
我有。但是对于手头的问题,它并没有什么不同。是吗?
-
buf 是您的接收缓冲区还是发送缓冲区?在关闭服务器之前,您对客户端采取了哪些操作?服务器是否在同一台计算机上?
-
测试是在同一台计算机上使用服务器进行的。在连接 + 关闭服务器 + 发送此写入消息之前,我没有做任何事情。 buf 是发送缓冲区。