gpt4 book ai didi

windows - 处于阻塞模式时的套接字行为

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:31:02 25 4
gpt4 key购买 nike

我对使用阻塞套接字时发送函数的行为很感兴趣。

手册没有明确说明这个案例。

从我的测试(和文档)来看,当在阻塞套接字上使用发送时,我有两种情况:

  • 所有数据已发送
  • 返回一个错误,没有发送任何内容

在代码行中(例如在 C 中)这样翻译:

    // everything is allocated and initilized
int socket_fd;
char *buffer;
size_t buffer_len;
ssize_t nret;

nret = send(socket_fd, buffer, buffer_len, 0);
if(nret < 0)
{
// error - nothing was sent (at least we cannot assume anything)
}
else
{
// in case of blocking socket everything is sent (buffer_len == nret)
}

我说得对吗?

我对所有平台(Windows、Linux、*nix)上的这种行为很感兴趣。

最佳答案

来自手册页。 ( http://linux.die.net/man/2/send )

“成功时,这些调用返回发送的字符数。错误时,返回 -1,并适当设置 errno。”

你有三个条件。

  • -1 是套接字或其绑定(bind)中的本地错误。

  • 一些数字 < 长度:并非所有字节都已发送。当套接字被标记为非阻塞并且请求的操作将阻塞时,通常会出现这种情况; errno 值为 EAGAIN。

    您可能看不到它,因为您正在执行阻塞 I/O。

    但是,套接字的另一端可能会过早关闭连接,这可能会导致这种情况。 errno 值可能是 EPIPE。

  • 一些数字 == 长度:所有字节都已发送。

关于windows - 处于阻塞模式时的套接字行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/661636/

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