On 05/05/2010 13:21, Steffen Weiberle wrote:
Using Solaris 10, so no IP provider, I am trying to figure out when a
connection attempt is failing in a client. The connect() statement takes
a file descriptor, which is an integer and has no connection details.
Since I don't know if the connect is closely preceded with a bind() or a new connection may be attempted with the same socket, and thus I won't be capturing the bin, I can't rely on it to get the sockaddr structure.

Just wanted to note that this sort of thing will become easier
(for Nevada at least) when the tcp provider delivers (which
should be soon):

tcp:::connect-refused
{
    printf("connection refused: pid %d, remote host/port %s/%d\n",
        args[1]->cs_pid, args[3]->tcps_raddr, args[3]->tcps_rport);
}

Alan
(The event happens very infrequently, maybe once a day)

So I am trying tcp_connect FBT probe.

fbt::tcp_connect:entry
{
       printf("execname: %s \n", execname);
       self->sockaddr = args[1];

       printf("family: %x \n", self->sockaddr->sa_family);
}

However, I get

# /var/tmp/connect.d
dtrace: failed to compile script /var/tmp/connect.d: line 32: sa_family
is not a member of struct msgb

Note is says 'msgb', not 'sockaddr'.

I got the args[1] from the OpenSolaris source code (and maybe that is my
problem, since I am running on Solaris 10--did the code change that
much?--seems unlikely)

http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/uts/common/inet/tcp/tcp_socket.c#232

Any good way to grab the IPv4 address and port number on an entry so I
can have it in the situation the connect() fails?

Thanks
Steffen


_______________________________________________
dtrace-discuss mailing list
dtrace-discuss@opensolaris.org

_______________________________________________
dtrace-discuss mailing list
dtrace-discuss@opensolaris.org

Reply via email to