Source File
fd_unix.go
Belonging Package
net
package net
import (
)
const (
readSyscallName = "read"
readFromSyscallName = "recvfrom"
readMsgSyscallName = "recvmsg"
writeSyscallName = "write"
writeToSyscallName = "sendto"
writeMsgSyscallName = "sendmsg"
)
func (, , int, string) (*netFD, error) {
:= &netFD{
pfd: poll.FD{
Sysfd: ,
IsStream: == syscall.SOCK_STREAM,
ZeroReadIsEOF: != syscall.SOCK_DGRAM && != syscall.SOCK_RAW,
},
family: ,
sotype: ,
net: ,
}
return , nil
}
func ( *netFD) () error {
return .pfd.Init(.net, true)
}
func ( *netFD) () string {
var , string
if .laddr != nil {
= .laddr.String()
}
if .raddr != nil {
= .raddr.String()
}
return .net + ":" + + "->" +
}
.pfd.SetWriteDeadline(aLongTimeAgo)
testHookCanceledDial()
<- .Err()
case <-:
<- nil
}
}()
}
if := .pfd.WaitWrite(); != nil {
select {
case <-.Done():
return nil, mapErr(.Err())
default:
}
return nil,
}
, := getsockoptIntFunc(.pfd.Sysfd, syscall.SOL_SOCKET, syscall.SO_ERROR)
if != nil {
return nil, os.NewSyscallError("getsockopt", )
}
switch := syscall.Errno(); {
case syscall.EINPROGRESS, syscall.EALREADY, syscall.EINTR:
case syscall.EISCONN:
return nil, nil
if , := syscall.Getpeername(.pfd.Sysfd); == nil {
return , nil
}
default:
return nil, os.NewSyscallError("connect", )
}
runtime.KeepAlive()
}
}
func ( *netFD) () ( *netFD, error) {
, , , := .pfd.Accept()
if != nil {
if != "" {
= wrapSyscallError(, )
}
return nil,
}
if , = newFD(, .family, .sotype, .net); != nil {
poll.CloseFunc()
return nil,
}
if = .init(); != nil {
.Close()
return nil,
}
, := syscall.Getsockname(.pfd.Sysfd)
.setAddr(.addrFunc()(), .addrFunc()())
return , nil
}
func ( *netFD) () ( *os.File, error) {
, , := .pfd.Dup()
if != nil {
if != "" {
= os.NewSyscallError(, )
}
return nil,
}
return os.NewFile(uintptr(), .name()), nil
![]() |
The pages are generated with Golds v0.3.2-preview. (GOOS=darwin GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |