linux的内核版本是2.6.18,x86_64.
man里的解释是:
EBADF |
The argument s is an invalid descriptor |
我的模拟测试环境是:
前端loadrunner模拟web点击,通过后端的weblogic压自己的服务的时候发现,有时候recv会收到这个错误,意思就是这个fd已经失效了,但是有点不是很明白,所以查询下内核实现,验证下。
首先recv的实现就是调用的recvfrom:
/*
* Receive a datagram from a socket.
*/
asmlinkage long sys_recv(int fd, void __user * ubuf, size_t size, unsigned flags)
{
return sys_recvfrom(fd, ubuf, size, flags, NULL, NULL);
}
然后看 sys_recvfrom 的实现: