Commit efc4088c authored by Rob Pike's avatar Rob Pike

make IP address available

R=rsc
DELTA=30  (30 added, 0 deleted, 0 changed)
OCL=30536
CL=30536
parent 7f3eb273
...@@ -436,3 +436,13 @@ func (fd *netFD) addr() string { ...@@ -436,3 +436,13 @@ func (fd *netFD) addr() string {
addr, err1 := sockaddrToString(sa); addr, err1 := sockaddrToString(sa);
return addr; return addr;
} }
func (fd *netFD) remoteAddr() string {
sa, err := syscall.Getpeername(fd.fd);
if err != 0 {
return "";
}
// TODO(rsc): woud like to say err not err1 but 6g complains
addr, err1 := sockaddrToString(sa);
return addr;
}
...@@ -33,6 +33,12 @@ type Conn interface { ...@@ -33,6 +33,12 @@ type Conn interface {
// Close closes the connection. // Close closes the connection.
Close() os.Error; Close() os.Error;
// LocalAddr returns the local network address.
LocalAddr() string;
// RemoteAddr returns the remote network address.
RemoteAddr() string;
// For packet-based protocols such as UDP, // For packet-based protocols such as UDP,
// ReadFrom reads the next packet from the network, // ReadFrom reads the next packet from the network,
// returning the number of bytes read and the remote // returning the number of bytes read and the remote
...@@ -318,6 +324,20 @@ type connBase struct { ...@@ -318,6 +324,20 @@ type connBase struct {
raddr string; raddr string;
} }
func (c *connBase) LocalAddr() string {
if c == nil {
return ""
}
return c.fd.addr();
}
func (c *connBase) RemoteAddr() string {
if c == nil {
return ""
}
return c.fd.remoteAddr();
}
func (c *connBase) File() *os.File { func (c *connBase) File() *os.File {
if c == nil { if c == nil {
return nil return nil
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment