This is the command getsockname that can be run in the OnWorks free hosting provider using one of our multiple free online workstations such as Ubuntu Online, Fedora Online, Windows online emulator or MAC OS online emulator
getpeername - get information about this or that end of the socket's connection
getpeername [ -verbose ] [ -sock ] [ fd ]
getsockname [ -verbose ] [ -peer ] [ fd ]
This is not the manual page for the getpeername system call. That manual page is in
section 2. You can access it using a command like "man 2 getpeername" or "man -s 2
getpeername". I apologize for the confusion.
getpeername performs a getpeername(2) system call on one of its file descriptors specified
by fd and prints out the results. The default fd is 0 (stdin). You may cause getpeername
to behave like getsockname by providing the -sock argument.
getsockname performs a getsockname(2) system call on one of its file descriptors specified
by fd and prints out the results. The default fd is 0 (stdin). You may cause getsockname
to behave like getpeername by providing the -peer argument.
There is a severe limitation of getpeername. If the remote process has closed the
connection, getpeername will fail with a `Socket is not connected' error. This will
happen with dismaying frequency when the remote process is not dependent upon the local
process for input and it is only sending small amounts of output before closing the
connection. Hopefully the practical uses of getpeername (if there are any) will not
exercise this problem.
You can use getpeername to find out the address of the opposite end of a socket. You can
use getsockname to find out the address of the local end of a socket. They are in fact
the same program with different names. We will refer to both of them by the name
getpeername in the following description.
getpeername knows how to display peer information about UNIX and Internet sockets. If you
try to use it on another type of socket, it will fail with an "unknown address family"
error. If you regularly deal with strange sockets and wish getpeername to work with them,
send me email.
If the socket is a UNIX domain socket, then getpeername prints the name of the file (which
is the port) on a single line. If -verbose was specified, getpeername prints a more
detailed report consisting of the word `Unix' on the first line, the word `Port' on the
second line, and the name of the file on the third line.
If the socket is an Internet socket, then getpeername prints the port number on the first
line and the numeric address on the second line. If -verbose was specified, getpeername
prints a more detailed report consisting of the word `Internet' on the first line, the
word `Port' on the second line, the port numer on the third line, the word `Host' on the
fourth line. Starting on the fifth line it prints all the numeric internet addresses
returned by the gethostbyaddr(3) library routine. On the rest of the lines it prints all
the host names.
If you specify -verbose twice, the program will print a copyright notice.
I originally designed getpeername so that a faucet-spawned shell script could find out who
was talking to it (and maybe perform access control). I added getsockname for
completeness. Now I realize that getsockname is useful for multi-homing services.
However, most software that you want to understand multi-homing (httpd, ftpd) is already
capable of doing it, and much more efficiently than a script wrapper. Still, it might
come in handy some day.
client$ hose mail.cise.ufl.edu smtp --in ./getpeername
You connected to mail.cis.ufl.edu on the SMTP port (port 25). For a verbose report:
client$ hose mail.cise.ufl.edu smtp --in ./getpeername -v
Now let's give an example of a race condition which will cause getpeername to fail:
client$ hose web.cise.ufl.edu 80 -in ./getpeername
./getpeername: getpeername failed on descriptor 0: Socket is not connected
The HTTP daemon tries to read a request, finds that half of the full duplex connection
closed (by the special behavior of the -in option on hose(1)) and drops the connection
before getpeername can query the file descriptor. We can cause the HTTP daemon to wait
for us by leaving both halves of the duplex connection open.
client$ hose web.cise.ufl.edu 80 -fd0 ./getpeername -v
And, finally, let's extract some useful information from our socket.
client$ hose web.cise.ufl.edu 80 -fd0 sh -c " ./getpeername -v | \
tail +5 | egrep -v '^[0-9.]*$' | head -1"
Socket operation on non-socket The fd you specified does not refer to a socket, or refers
to a socket that has been closed. This happens when you run getpeername by itself (it is
unlikely that any of the file descriptors attached to an interactive shell are actually
sockets), or if you goof up your faucet/hose command and forgot to dup(2) one of your
descriptors, or if the remote machine manages to close the connection before getpeername
Bad file number You gave it a bad file number for fd. If you have enough skill to
actually generate this error, you probably know what is wrong.
If you encounter any other errors, clue me in.
Use getsockname online using onworks.net services