gpt4 book ai didi

c - 如何在我的 write() 超时时破坏性地关闭套接字?

转载 作者:太空宇宙 更新时间:2023-11-04 08:15:57 25 4
gpt4 key购买 nike

不确定我对标题的措辞如何。我写了一个 linux 域套接字服务器和客户端。客户端在写入时设置超时值。如果客户端无法发送其所有数据,我不希望服务器接受它已发送的数据。客户端有没有办法表明它没有发送所有数据?也许以某种方式导致服务器的 read() 失败?套接字设置为流套接字。

所以基本上我想知道在这种情况下该怎么做:

ssize_t bytes_written = write(fd, buffer, length);
if (bytes_written == -1)
{
result = -1;
goto done;
}

// I think the only case where we can have write return
// a successful code but not all bytes written is when the
// timeout value has elapsed and some number of bytes have
// been written.

if (bytes_written != length)
{
result = -1;
errno = ETIMEDOUT;
}
.
.
.

done:
if (result == -1)
result = errno;
if (fd != -1)
{
shutdown(fd, SHUT_RDWR);
close(fd);
}
return result;
}

我意识到一个明显的解决方案是让客户端先发送字节计数,然后再发送字节。我想知道是否有另一种方法。此外,每条消息的大小可能不同。

最佳答案

您可以在数据的头部加上一个长度来打包您的数据。如果数据与长度不匹配,服务器可以丢弃数据。

关于c - 如何在我的 write() 超时时破坏性地关闭套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35786699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com