On Sun, Jan 22, 2006 at 12:24:10PM -0800, David S. Miller ([EMAIL PROTECTED]) 
wrote:
> From: Evgeniy Polyakov <[EMAIL PROTECTED]>
> Date: Sat, 21 Jan 2006 13:15:49 +0300
> 
> > On Fri, Jan 20, 2006 at 05:06:36PM -0600, Christopher Friesen ([EMAIL 
> > PROTECTED]) wrote:
> > > 
> > > I've been asked if there is any way to map a "struct socket *" in 
> > > kernelspace, to the userspace fd that corresponds to it.
> > > 
> > > I came up with looping through current->files->fd[i] and matching it 
> > > against socket->file--if they match then "i" is the fd.
> > > 
> > > Is there a better way?
> > 
> > struct file *file = fget(fd)/fget_light(fd);
> > struct inode *inode = igrab(file->f_dentry->d_inode);
> > struct socket *socket = SOCKET_I(inode);
> 
> He wants to go the other direction, from socket to file descriptor.
> 
> Typically people doing this are implementing desktop notifiers for
> socket activity and stuff like that in order to fill in a feature
> checkbox that Windows happens to have...
> 
> In my opinion, such things have little sense because of the one
> to many mapping from sockets to filedescriptors.  Which app gets
> to make a decision or get the notifier?  There is no good clean
> answer to that question.

Argh, I see.
Then probably it could be possible to keep a track from application and it's 
table into socket
structure. Or run through all possible descriptors.
Or create some "request" from those application, which wants such a
notifier, keep it in some structure in a socket.
Or just register a wait_queue_t entry in the given socket's sk_sleep
head...

-- 
        Evgeniy Polyakov
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to