LEFT | RIGHT |
(no file at all) | |
1 // Copyright 2009 The Go Authors. All rights reserved. | 1 // Copyright 2009 The Go Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style | 2 // Use of this source code is governed by a BSD-style |
3 // license that can be found in the LICENSE file. | 3 // license that can be found in the LICENSE file. |
4 | 4 |
5 // +build darwin freebsd linux netbsd openbsd windows | 5 // +build darwin freebsd linux netbsd openbsd windows |
6 | 6 |
7 // Sockets | 7 // Sockets |
8 | 8 |
9 package net | 9 package net |
10 | 10 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 } | 51 } |
52 } | 52 } |
53 | 53 |
54 if fd, err = newFD(s, f, t, net); err != nil { | 54 if fd, err = newFD(s, f, t, net); err != nil { |
55 closesocket(s) | 55 closesocket(s) |
56 return nil, err | 56 return nil, err |
57 } | 57 } |
58 | 58 |
59 if ursa != nil { | 59 if ursa != nil { |
60 if !deadline.IsZero() { | 60 if !deadline.IsZero() { |
61 » » » fd.wdeadline = deadline.UnixNano() | 61 » » » setWriteDeadline(fd, deadline) |
62 } | 62 } |
63 if err = fd.connect(ursa); err != nil { | 63 if err = fd.connect(ursa); err != nil { |
64 closesocket(s) | 64 closesocket(s) |
65 fd.Close() | 65 fd.Close() |
66 return nil, err | 66 return nil, err |
67 } | 67 } |
68 fd.isConnected = true | 68 fd.isConnected = true |
69 » » fd.wdeadline = 0 | 69 » » setWriteDeadline(fd, time.Time{}) |
70 } | 70 } |
71 | 71 |
72 lsa, _ := syscall.Getsockname(s) | 72 lsa, _ := syscall.Getsockname(s) |
73 laddr := toAddr(lsa) | 73 laddr := toAddr(lsa) |
74 rsa, _ := syscall.Getpeername(s) | 74 rsa, _ := syscall.Getpeername(s) |
75 raddr := toAddr(rsa) | 75 raddr := toAddr(rsa) |
76 fd.setAddr(laddr, raddr) | 76 fd.setAddr(laddr, raddr) |
77 return fd, nil | 77 return fd, nil |
78 } | 78 } |
79 | 79 |
80 type writerOnly struct { | 80 type writerOnly struct { |
81 io.Writer | 81 io.Writer |
82 } | 82 } |
83 | 83 |
84 // Fallback implementation of io.ReaderFrom's ReadFrom, when sendfile isn't | 84 // Fallback implementation of io.ReaderFrom's ReadFrom, when sendfile isn't |
85 // applicable. | 85 // applicable. |
86 func genericReadFrom(w io.Writer, r io.Reader) (n int64, err error) { | 86 func genericReadFrom(w io.Writer, r io.Reader) (n int64, err error) { |
87 // Use wrapper to hide existing r.ReadFrom from io.Copy. | 87 // Use wrapper to hide existing r.ReadFrom from io.Copy. |
88 return io.Copy(writerOnly{w}, r) | 88 return io.Copy(writerOnly{w}, r) |
89 } | 89 } |
LEFT | RIGHT |