我正在使用阻塞模式的套接字编程,我有一个关于 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/