OLD | NEW |
1 // Copyright 2012 The Go Authors. All rights reserved. | 1 // Copyright 2012 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 package net_test | 5 package net_test |
6 | 6 |
7 import ( | 7 import ( |
8 "bytes" | 8 "bytes" |
9 "net" | 9 "net" |
10 "os" | 10 "os" |
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
256 } | 256 } |
257 } | 257 } |
258 | 258 |
259 func TestUnixConnSpecificMethods(t *testing.T) { | 259 func TestUnixConnSpecificMethods(t *testing.T) { |
260 switch runtime.GOOS { | 260 switch runtime.GOOS { |
261 case "plan9", "windows": | 261 case "plan9", "windows": |
262 t.Logf("skipping test on %q", runtime.GOOS) | 262 t.Logf("skipping test on %q", runtime.GOOS) |
263 return | 263 return |
264 } | 264 } |
265 | 265 |
266 » p1, p2 := "/tmp/gotest.net1", "/tmp/gotest.net2" | 266 » p1, p2, p3 := "/tmp/gotest.net1", "/tmp/gotest.net2", "/tmp/gotest.net3" |
267 os.Remove(p1) | 267 os.Remove(p1) |
268 os.Remove(p2) | 268 os.Remove(p2) |
| 269 os.Remove(p3) |
269 | 270 |
270 a1, err := net.ResolveUnixAddr("unixgram", p1) | 271 a1, err := net.ResolveUnixAddr("unixgram", p1) |
271 if err != nil { | 272 if err != nil { |
272 t.Fatalf("net.ResolveUnixAddr failed: %v", err) | 273 t.Fatalf("net.ResolveUnixAddr failed: %v", err) |
273 } | 274 } |
274 c1, err := net.DialUnix("unixgram", a1, nil) | 275 c1, err := net.DialUnix("unixgram", a1, nil) |
275 if err != nil { | 276 if err != nil { |
276 t.Fatalf("net.DialUnix failed: %v", err) | 277 t.Fatalf("net.DialUnix failed: %v", err) |
277 } | 278 } |
278 c1.LocalAddr() | 279 c1.LocalAddr() |
(...skipping 19 matching lines...) Expand all Loading... |
298 c2.LocalAddr() | 299 c2.LocalAddr() |
299 c2.RemoteAddr() | 300 c2.RemoteAddr() |
300 c2.SetDeadline(time.Now().Add(100 * time.Millisecond)) | 301 c2.SetDeadline(time.Now().Add(100 * time.Millisecond)) |
301 c2.SetReadDeadline(time.Now().Add(100 * time.Millisecond)) | 302 c2.SetReadDeadline(time.Now().Add(100 * time.Millisecond)) |
302 c2.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)) | 303 c2.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)) |
303 c2.SetReadBuffer(2048) | 304 c2.SetReadBuffer(2048) |
304 c2.SetWriteBuffer(2048) | 305 c2.SetWriteBuffer(2048) |
305 defer c2.Close() | 306 defer c2.Close() |
306 defer os.Remove(p2) | 307 defer os.Remove(p2) |
307 | 308 |
| 309 a3, err := net.ResolveUnixAddr("unixgram", p3) |
| 310 if err != nil { |
| 311 t.Errorf("net.ResolveUnixAddr failed: %v", err) |
| 312 return |
| 313 } |
| 314 c3, err := net.ListenUnixgram("unixgram", a3) |
| 315 if err != nil { |
| 316 t.Errorf("net.ListenUnixgram failed: %v", err) |
| 317 return |
| 318 } |
| 319 c3.LocalAddr() |
| 320 c3.RemoteAddr() |
| 321 c3.SetDeadline(time.Now().Add(100 * time.Millisecond)) |
| 322 c3.SetReadDeadline(time.Now().Add(100 * time.Millisecond)) |
| 323 c3.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)) |
| 324 c3.SetReadBuffer(2048) |
| 325 c3.SetWriteBuffer(2048) |
| 326 defer c3.Close() |
| 327 defer os.Remove(p3) |
| 328 |
308 wb := []byte("UNIXCONN TEST") | 329 wb := []byte("UNIXCONN TEST") |
309 rb1 := make([]byte, 128) | 330 rb1 := make([]byte, 128) |
310 rb2 := make([]byte, 128) | 331 rb2 := make([]byte, 128) |
| 332 rb3 := make([]byte, 128) |
311 if _, _, err := c1.WriteMsgUnix(wb, nil, a2); err != nil { | 333 if _, _, err := c1.WriteMsgUnix(wb, nil, a2); err != nil { |
312 t.Errorf("net.UnixConn.WriteMsgUnix failed: %v", err) | 334 t.Errorf("net.UnixConn.WriteMsgUnix failed: %v", err) |
313 return | 335 return |
314 } | 336 } |
315 if _, _, _, _, err := c2.ReadMsgUnix(rb2, nil); err != nil { | 337 if _, _, _, _, err := c2.ReadMsgUnix(rb2, nil); err != nil { |
316 t.Errorf("net.UnixConn.ReadMsgUnix failed: %v", err) | 338 t.Errorf("net.UnixConn.ReadMsgUnix failed: %v", err) |
317 return | 339 return |
318 } | 340 } |
319 if _, err := c2.WriteToUnix(wb, a1); err != nil { | 341 if _, err := c2.WriteToUnix(wb, a1); err != nil { |
320 t.Errorf("net.UnixConn.WriteToUnix failed: %v", err) | 342 t.Errorf("net.UnixConn.WriteToUnix failed: %v", err) |
321 return | 343 return |
322 } | 344 } |
323 if _, _, err := c1.ReadFromUnix(rb1); err != nil { | 345 if _, _, err := c1.ReadFromUnix(rb1); err != nil { |
324 t.Errorf("net.UnixConn.ReadFromUnix failed: %v", err) | 346 t.Errorf("net.UnixConn.ReadFromUnix failed: %v", err) |
325 return | 347 return |
326 } | 348 } |
| 349 if _, err := c3.WriteToUnix(wb, a1); err != nil { |
| 350 t.Errorf("net.UnixConn.WriteToUnix failed: %v", err) |
| 351 return |
| 352 } |
| 353 if _, _, err := c1.ReadFromUnix(rb1); err != nil { |
| 354 t.Errorf("net.UnixConn.ReadFromUnix failed: %v", err) |
| 355 return |
| 356 } |
| 357 if _, err := c2.WriteToUnix(wb, a3); err != nil { |
| 358 t.Errorf("net.UnixConn.WriteToUnix failed: %v", err) |
| 359 return |
| 360 } |
| 361 if _, _, err := c3.ReadFromUnix(rb3); err != nil { |
| 362 t.Errorf("net.UnixConn.ReadFromUnix failed: %v", err) |
| 363 return |
| 364 } |
327 | 365 |
328 // TODO: http://golang.org/issue/3875 | |
329 net.ListenUnixgram("unixgram", nil) | |
330 | |
331 if f, err := c1.File(); err != nil { | 366 if f, err := c1.File(); err != nil { |
332 t.Errorf("net.UnixConn.File failed: %v", err) | 367 t.Errorf("net.UnixConn.File failed: %v", err) |
333 return | 368 return |
334 } else { | 369 } else { |
335 f.Close() | 370 f.Close() |
336 } | 371 } |
337 } | 372 } |
338 | 373 |
339 func newICMPEchoRequest(id, seqnum, msglen int, filler []byte) []byte { | 374 func newICMPEchoRequest(id, seqnum, msglen int, filler []byte) []byte { |
340 b := newICMPInfoMessage(id, seqnum, msglen, filler) | 375 b := newICMPInfoMessage(id, seqnum, msglen, filler) |
(...skipping 22 matching lines...) Expand all Loading... |
363 b[0] = 0 // type | 398 b[0] = 0 // type |
364 b[1] = 0 // code | 399 b[1] = 0 // code |
365 b[2] = 0 // checksum | 400 b[2] = 0 // checksum |
366 b[3] = 0 // checksum | 401 b[3] = 0 // checksum |
367 b[4] = byte(id >> 8) // identifier | 402 b[4] = byte(id >> 8) // identifier |
368 b[5] = byte(id & 0xff) // identifier | 403 b[5] = byte(id & 0xff) // identifier |
369 b[6] = byte(seqnum >> 8) // sequence number | 404 b[6] = byte(seqnum >> 8) // sequence number |
370 b[7] = byte(seqnum & 0xff) // sequence number | 405 b[7] = byte(seqnum & 0xff) // sequence number |
371 return b | 406 return b |
372 } | 407 } |
OLD | NEW |