关于sendInLoop中EAGAIN的处理
M6ZeroG opened this issue · comments
这里当err == unix.EAGAIN
时直接return的话,不管n是多少,未Write()
成功的那部分数据相当于直接丢弃了,为什么不把这部分未成功写入的数据存到c.outBuffer
里再return呢?请教。
Lines 267 to 273 in 8e27f6e
这里当
err == unix.EAGAIN
时直接return的话,不管n是多少,未Write()
成功的那部分数据相当于直接丢弃了,为什么不把这部分未成功写入的数据存到c.outBuffer
里再return呢?请教。
Lines 267 to 273 in 8e27f6e
我理解 linux 里返回 EAGAIN , n 会被置为 -1, golang 里n会返回啥,我没找到确切的资料。
按你这里所说,返回 EAGAIN ,会存在 n 大于 0 的情况?有相关资料吗?
这里当
err == unix.EAGAIN
时直接return的话,不管n是多少,未Write()
成功的那部分数据相当于直接丢弃了,为什么不把这部分未成功写入的数据存到c.outBuffer
里再return呢?请教。
Lines 267 to 273 in 8e27f6e
我理解 linux 里返回 EAGAIN , n 会被置为 -1, golang 里n会返回啥,我没找到确切的资料。
按你这里所说,返回 EAGAIN ,会存在 n 大于 0 的情况?有相关资料吗?
根据golang封装的Write()
源码上看,这个n应该就是 linux系统调用返回值,暂时还没有实测过
https://github.com/golang/sys/blob/master/unix/zsyscall_linux.go#L1565-L1578
这里当
err == unix.EAGAIN
时直接return的话,不管n是多少,未Write()
成功的那部分数据相当于直接丢弃了,为什么不把这部分未成功写入的数据存到c.outBuffer
里再return呢?请教。
Lines 267 to 273 in 8e27f6e
我理解 linux 里返回 EAGAIN , n 会被置为 -1, golang 里n会返回啥,我没找到确切的资料。
按你这里所说,返回 EAGAIN ,会存在 n 大于 0 的情况?有相关资料吗?根据golang封装的
Write()
源码上看,这个n应该就是 linux系统调用返回值,暂时还没有实测过
https://github.com/golang/sys/blob/master/unix/zsyscall_linux.go#L1565-L1578
这里我也看过,结合 linux man,似乎会返回 -1 ,但是返回 -1 的话又不符合 go 的“哲学”了,已经返回 err 了,n 应该是一个零值