Closed M6ZeroG closed 3 years ago
非常感谢,这里确实有问题。 已经提了修复的 PR ,可以看下 https://github.com/Allenxuxu/gev/pull/61 @M6ZeroG
非常感谢,这里确实有问题。 已经提了修复的 PR ,可以看下 #61 @M6ZeroG
不客气,还以为我对EAGAIN的理解有问题呢,查了资料又看了好久:joy:
这里当
err == unix.EAGAIN
时直接return的话,不管n是多少,未Write()
成功的那部分数据相当于直接丢弃了,为什么不把这部分未成功写入的数据存到c.outBuffer
里再return呢?请教。 https://github.com/Allenxuxu/gev/blob/8e27f6e802c5b940e09d00114a07ff2d18b53324/connection/connection.go#L267-L273
我理解 linux 里返回 EAGAIN , n 会被置为 -1, golang 里n会返回啥,我没找到确切的资料。 按你这里所说,返回 EAGAIN ,会存在 n 大于 0 的情况?有相关资料吗?
这里当
err == unix.EAGAIN
时直接return的话,不管n是多少,未Write()
成功的那部分数据相当于直接丢弃了,为什么不把这部分未成功写入的数据存到c.outBuffer
里再return呢?请教。 https://github.com/Allenxuxu/gev/blob/8e27f6e802c5b940e09d00114a07ff2d18b53324/connection/connection.go#L267-L273我理解 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呢?请教。 https://github.com/Allenxuxu/gev/blob/8e27f6e802c5b940e09d00114a07ff2d18b53324/connection/connection.go#L267-L273我理解 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 应该是一个零值
这里当
err == unix.EAGAIN
时直接return的话,不管n是多少,未Write()
成功的那部分数据相当于直接丢弃了,为什么不把这部分未成功写入的数据存到c.outBuffer
里再return呢?请教。 https://github.com/Allenxuxu/gev/blob/8e27f6e802c5b940e09d00114a07ff2d18b53324/connection/connection.go#L267-L273