155
155
//sys connect(s int, addr uintptr, addrlen _Socklen) (errno int)
156
156
//sysnb socket(domain int, typ int, proto int) (fd int, errno int)
157
157
//sys getsockopt(s int, level int, name int, val uintptr, vallen *_Socklen) (errno int)
158
//sys setsockopt(s int, level int, name int, val uintptr, vallen int) (errno int)
158
//sys setsockopt(s int, level int, name int, val uintptr, vallen uintptr) (errno int)
159
159
//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (errno int)
160
160
//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (errno int)
161
161
//sys Shutdown(s int, how int) (errno int)
402
402
func SetsockoptString(fd, level, opt int, s string) (errno int) {
403
return setsockopt(fd, level, opt, uintptr(unsafe.Pointer(&[]byte(s)[0])), len(s))
403
return setsockopt(fd, level, opt, uintptr(unsafe.Pointer(&[]byte(s)[0])), uintptr(len(s)))
406
406
//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, errno int)
425
425
return sendto(fd, p, flags, ptr, n)
428
//sys recvmsg(s int, msg *Msghdr, flags int) (n int, errno int)
430
func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, errno int) {
432
var rsa RawSockaddrAny
433
msg.Name = (*byte)(unsafe.Pointer(&rsa))
434
msg.Namelen = uint32(SizeofSockaddrAny)
437
iov.Base = (*byte)(unsafe.Pointer(&p[0]))
442
// receive at least one normal byte
447
msg.Control = (*byte)(unsafe.Pointer(&oob[0]))
448
msg.SetControllen(len(oob))
452
if n, errno = recvmsg(fd, &msg, flags); errno != 0 {
455
oobn = int(msg.Controllen)
456
recvflags = int(msg.Flags)
457
// source address is only specified if the socket is unconnected
458
if rsa.Addr.Family != AF_UNSPEC {
459
from, errno = anyToSockaddr(&rsa)
464
//sys sendmsg(s int, msg *Msghdr, flags int) (errno int)
466
func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (errno int) {
471
ptr, salen, err = to.sockaddr()
477
msg.Name = (*byte)(unsafe.Pointer(ptr))
478
msg.Namelen = uint32(salen)
481
iov.Base = (*byte)(unsafe.Pointer(&p[0]))
486
// send at least one normal byte
491
msg.Control = (*byte)(unsafe.Pointer(&oob[0]))
492
msg.SetControllen(len(oob))
496
if errno = sendmsg(fd, &msg, flags); errno != 0 {
429
503
// FreeBSD has IP_SENDIF. Darwin probably needs BSDLLCTest, see:
430
504
// http://developer.apple.com/mac/library/samplecode/BSDLLCTest/index.html
452
526
// Translate "kern.hostname" to []_C_int{0,1,2,3}.
453
527
func nametomib(name string) (mib []_C_int, errno int) {
454
const siz = uintptr(unsafe.Sizeof(mib[0]))
528
const siz = unsafe.Sizeof(mib[0])
456
530
// NOTE(rsc): It seems strange to set the buffer to have
457
531
// size CTL_MAXNAME+2 but use only CTL_MAXNAME
541
615
//sys fcntl(fd int, cmd int, arg int) (val int, errno int)
543
func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, errno int) {
544
return 0, 0, 0, nil, EAFNOSUPPORT
547
func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (errno int) {
552
618
// Acct(name nil-string) (errno int)
553
619
// Gethostuuid(uuid *byte, timeout *Timespec) (errno int)