On Saturday, February 28, 2004, at 09:52 AM, grinder wrote:


I want to create a small kernel module which logs the socket operations.

So in my module i have a socket structure, and i want to know
which process (thread) owns it. But the socket structure isn't
contains any reference to the process structure. If i walk through
the vnode table i can find my socket by the so_gencnt "unique id",
but the vnode structure isn't have any variables back to the proc structure.


Is it possible to get the owner proc structure for a socket?

Not really. Socket descriptors, like other file-descriptors, can be handed off by the fork/exec process, and via local domain sockets to unrelated processes, so by the time that the socket is actually used, there can be no relation to the process that created it (e.g., inetd/xinetd creates it, waits for a connection, accepts the connection, and then passes the descriptor to the service process via fork/exec, and closes its version of that socket).


The best you can hope for is to determine processes that are actually using the socket, and that can vary during the socket's lifetime. You would have to scour the file descriptor tables in all process structures to determine which processes had a handle on each socket you have an interest in.

There is no real "ownership" of anything accessed via file descriptors.

Regards,

Justin

--
Justin C. Walker, Curmudgeon-At-Large *
Institute for General Semantics | It's not whether you win or lose...
| It's whether *I* win or lose.
*--------------------------------------*-------------------------------*


_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to