Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(1299)

Side by Side Diff: ipv4/syscall_linux_386.go

Issue 97800043: code review 97800043: go.net/ipv4: add support for dragonfly (Closed)
Patch Set: diff -r 88fa30947066 https://code.google.com/p/go.net Created 9 years, 11 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2009 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 // This code is a duplicate of syscall/syscall_linux_386.go with small
6 // modifications.
7
8 package ipv4
9
10 import (
11 "syscall"
12 "unsafe"
13 )
14
15 // On x86 Linux, all the socket calls go through an extra indirection,
16 // I think because the 5-register system call interface can't handle
17 // the 6-argument calls like sendto and recvfrom. Instead the
18 // arguments to the underlying system call are the number below and a
19 // pointer to an array of uintptr. We hide the pointer in the
20 // socketcall assembly to avoid allocation on every system call.
21
22 const (
23 // See /usr/include/linux/net.h.
24 _SETSOCKOPT = 14
25 _GETSOCKOPT = 15
26 )
27
28 var socketcall func(call int, a0, a1, a2, a3, a4, a5 uintptr) (int, syscall.Errn o)
29
30 func getsockopt(fd int, level int, name int, v unsafe.Pointer, l *sysSockoptLen) error {
iant 2014/05/10 00:02:55 Using a getsockopt function instead of something l
mikio 2014/05/14 13:09:00 i have a plan that improves multicast control and
31 if _, errno := socketcall(_GETSOCKOPT, uintptr(fd), uintptr(level), uint ptr(name), uintptr(v), uintptr(unsafe.Pointer(l)), 0); errno != 0 {
32 return error(errno)
33 }
34 return nil
35 }
36
37 func setsockopt(fd int, level int, name int, v unsafe.Pointer, l uintptr) error {
38 if _, errno := socketcall(_SETSOCKOPT, uintptr(fd), uintptr(level), uint ptr(name), uintptr(v), uintptr(l), 0); errno != 0 {
39 return error(errno)
40 }
41 return nil
42 }
OLDNEW
« ipv4/sys_dragonfly.go ('K') | « ipv4/sys_windows.go ('k') | ipv4/syscall_linux_386.s » ('j') | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b