Linux Kernel 2.6.9源码分析 -- accept
Linux Kernel 2.6.9源码分析 – accept 先来看一下原型:int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen) sockfd :这个套接字用来监听一个端口,当有一个客户与服务器连接时,它使用这个一个端口号,而此时这个端口号正与这个套接字关联。当然客户不知道套接字这些细节,它只知道一个地址和一个端口号。 addr :这是一个结果参数,它用来接受一个返回值,这返回值指定客户端的地址,当然这个地址是通过某个地址结构来描述的,用户应该知道这一个什么样的地址结构。如果对客户的地址不感兴趣,那么可以把这个值设置为NULL。 len :如同大家所认为的,它也是结果的参数,用来接受上述addr的结构的大小的,它指明addr结构所占有的字节个数。同样的,它也可以被设置为NULL。 下面来看看系统调用sys_accept asmlinkage long sys_accept ( int fd , struct sockaddr __user * upeer_sockaddr , int __user * upeer_addrlen ) { struct socket * sock , * newsock ; int err , len ; char address [ MAX_SOCK_ADDR ] ;