gpt4 book ai didi

c - 一个信号在阻塞模式下中断发送方法

转载 作者:行者123 更新时间:2023-12-01 13:51:38 25 4
gpt4 key购买 nike

我正在使用阻塞模式的套接字编程,我有一个关于 send 的问题方法。

send 的手册页中方法,它说:

[EINTR] A signal interrupts the system call before any data is transmitted.



这意味着如果一个信号在任何数据传输之前中断系统调用, send将返回 -1 和 errno将设置为 EINTR .

我的问题是,如果信号中断系统调用时已经传输了一部分数据,会返回什么。似乎它不应该返回 -1,因为它已经发送了一些数据。我认为它会返回已传输的数据数量,这意味着 send阻塞模式中的方法返回的数据数量可能少于您作为第三个参数传递的数据数量。
ssize_t send(int socket, const void *buffer, size_t length, int flags);

最佳答案

documentation清楚了。

RETURN VALUE

On success, these calls return the number of bytes sent. On error, -1 is returned, and errno is set appropriately.

[...]

EINTR A signal occurred before any data was transmitted;


send()要么返回
  • 发送的字节数
  • -1

  • -1返回原因通过 errno 的值指示.

    errno等于 EINTR信号中断 send()未收到任何数据 迄今为止。

    从上面的信息可以安全地得出结论,如果数据已收到 send()函数不会返回 -1 ,无论是否收到信号。

    关于c - 一个信号在阻塞模式下中断发送方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31157370/

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