Commit 6383896f authored by Mikio Hara's avatar Mikio Hara

net: update doc on socket

Also makes variable names a bit cleaner.

R=golang-dev, dave, r
CC=golang-dev
https://golang.org/cl/12808047
parent d3043b7b
...@@ -37,39 +37,46 @@ type sockaddr interface { ...@@ -37,39 +37,46 @@ type sockaddr interface {
toAddr() sockaddr toAddr() sockaddr
} }
// Generic POSIX socket creation. // socket returns a network file descriptor that is ready for
func socket(net string, f, t, p int, ipv6only bool, laddr, raddr sockaddr, deadline time.Time, toAddr func(syscall.Sockaddr) Addr) (fd *netFD, err error) { // asynchronous I/O using the network poller.
s, err := sysSocket(f, t, p) func socket(net string, family, sotype, proto int, ipv6only bool, laddr, raddr sockaddr, deadline time.Time, toAddr func(syscall.Sockaddr) Addr) (fd *netFD, err error) {
s, err := sysSocket(family, sotype, proto)
if err != nil { if err != nil {
return nil, err return nil, err
} }
if err = setDefaultSockopts(s, family, sotype, ipv6only); err != nil {
if err = setDefaultSockopts(s, f, t, ipv6only); err != nil {
closesocket(s) closesocket(s)
return nil, err return nil, err
} }
if fd, err = newFD(s, family, sotype, net); err != nil {
if fd, err = newFD(s, f, t, net); err != nil {
closesocket(s) closesocket(s)
return nil, err return nil, err
} }
// This function makes a network file descriptor for stream // This function makes a network file descriptor for the
// and datagram dialers, stream and datagram listeners. // following applications:
//
// - An endpoint holder that opens a passive stream
// connenction, known as a stream listener
//
// - An endpoint holder that opens a destination-unspecific
// datagram connection, known as a datagram listener
//
// - An endpoint holder that opens an active stream or a
// destination-specific datagram connection, known as a
// dialer
// //
// For dialers, they will require either named or unnamed // - An endpoint holder that opens the other connection, such
// sockets for their flights. We can assume that it's just a // as talking to the protocol stack inside the kernel
// request from a dialer that wants a named socket when both
// laddr and raddr are not nil. A dialer will also require a
// connection setup initiated socket when raddr is not nil.
// //
// For listeners and some dialers on datagram networks, they // For stream and datagram listeners, they will only require
// will only require named sockets. So we can assume that // named sockets, so we can assume that it's just a request
// it's just for a listener or a datagram dialer when laddr is // from stream or datagram listeners when laddr is not nil but
// not nil but raddr is nil. // raddr is nil. Otherwise we assume it's just for dialers or
// the other connection holders.
if laddr != nil && raddr == nil { if laddr != nil && raddr == nil {
switch t { switch sotype {
case syscall.SOCK_STREAM, syscall.SOCK_SEQPACKET: case syscall.SOCK_STREAM, syscall.SOCK_SEQPACKET:
if err := fd.listenStream(laddr, listenerBacklog, toAddr); err != nil { if err := fd.listenStream(laddr, listenerBacklog, toAddr); err != nil {
fd.Close() fd.Close()
......
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