@@ -38,7 +38,7 @@ func sysInit() {
38
38
var d syscall.WSAData
39
39
e := syscall .WSAStartup (uint32 (0x202 ), & d )
40
40
if e != nil {
41
- initErr = os .NewSyscallError ("WSAStartup " , e )
41
+ initErr = os .NewSyscallError ("wsastartup " , e )
42
42
}
43
43
canCancelIO = syscall .LoadCancelIoEx () == nil
44
44
if syscall .LoadGetAddrInfo () == nil {
@@ -297,7 +297,7 @@ func (fd *netFD) init() error {
297
297
size := uint32 (unsafe .Sizeof (flag ))
298
298
err := syscall .WSAIoctl (fd .sysfd , syscall .SIO_UDP_CONNRESET , (* byte )(unsafe .Pointer (& flag )), size , nil , 0 , & ret , nil , 0 )
299
299
if err != nil {
300
- return os .NewSyscallError ("WSAIoctl " , err )
300
+ return os .NewSyscallError ("wsaioctl " , err )
301
301
}
302
302
}
303
303
fd .rop .mode = 'r'
@@ -331,7 +331,7 @@ func (fd *netFD) connect(la, ra syscall.Sockaddr, deadline time.Time) error {
331
331
defer fd .setWriteDeadline (noDeadline )
332
332
}
333
333
if ! canUseConnectEx (fd .net ) {
334
- return connectFunc (fd .sysfd , ra )
334
+ return os . NewSyscallError ( "connect" , connectFunc (fd .sysfd , ra ) )
335
335
}
336
336
// ConnectEx windows API requires an unconnected, previously bound socket.
337
337
if la == nil {
@@ -344,7 +344,7 @@ func (fd *netFD) connect(la, ra syscall.Sockaddr, deadline time.Time) error {
344
344
panic ("unexpected type in connect" )
345
345
}
346
346
if err := syscall .Bind (fd .sysfd , la ); err != nil {
347
- return err
347
+ return os . NewSyscallError ( "bind" , err )
348
348
}
349
349
}
350
350
// Call ConnectEx API.
@@ -354,10 +354,13 @@ func (fd *netFD) connect(la, ra syscall.Sockaddr, deadline time.Time) error {
354
354
return connectExFunc (o .fd .sysfd , o .sa , nil , 0 , nil , & o .o )
355
355
})
356
356
if err != nil {
357
+ if _ , ok := err .(syscall.Errno ); ok {
358
+ err = os .NewSyscallError ("connectex" , err )
359
+ }
357
360
return err
358
361
}
359
362
// Refresh socket properties.
360
- return syscall .Setsockopt (fd .sysfd , syscall .SOL_SOCKET , syscall .SO_UPDATE_CONNECT_CONTEXT , (* byte )(unsafe .Pointer (& fd .sysfd )), int32 (unsafe .Sizeof (fd .sysfd )))
363
+ return os . NewSyscallError ( "setsockopt" , syscall .Setsockopt (fd .sysfd , syscall .SOL_SOCKET , syscall .SO_UPDATE_CONNECT_CONTEXT , (* byte )(unsafe .Pointer (& fd .sysfd )), int32 (unsafe .Sizeof (fd .sysfd ) )))
361
364
}
362
365
363
366
func (fd * netFD ) destroy () {
@@ -461,7 +464,11 @@ func (fd *netFD) Read(buf []byte) (int, error) {
461
464
if raceenabled {
462
465
raceAcquire (unsafe .Pointer (& ioSync ))
463
466
}
464
- return n , fd .eofError (n , err )
467
+ err = fd .eofError (n , err )
468
+ if _ , ok := err .(syscall.Errno ); ok {
469
+ err = os .NewSyscallError ("wsarecv" , err )
470
+ }
471
+ return n , err
465
472
}
466
473
467
474
func (fd * netFD ) readFrom (buf []byte ) (int , syscall.Sockaddr , error ) {
@@ -482,11 +489,14 @@ func (fd *netFD) readFrom(buf []byte) (int, syscall.Sockaddr, error) {
482
489
return syscall .WSARecvFrom (o .fd .sysfd , & o .buf , 1 , & o .qty , & o .flags , o .rsa , & o .rsan , & o .o , nil )
483
490
})
484
491
err = fd .eofError (n , err )
492
+ if _ , ok := err .(syscall.Errno ); ok {
493
+ err = os .NewSyscallError ("wsarecvfrom" , err )
494
+ }
485
495
if err != nil {
486
496
return n , nil , err
487
497
}
488
498
sa , _ := o .rsa .Sockaddr ()
489
- return n , sa , err
499
+ return n , sa , nil
490
500
}
491
501
492
502
func (fd * netFD ) Write (buf []byte ) (int , error ) {
@@ -502,6 +512,9 @@ func (fd *netFD) Write(buf []byte) (int, error) {
502
512
n , err := wsrv .ExecIO (o , "WSASend" , func (o * operation ) error {
503
513
return syscall .WSASend (o .fd .sysfd , & o .buf , 1 , & o .qty , 0 , & o .o , nil )
504
514
})
515
+ if _ , ok := err .(syscall.Errno ); ok {
516
+ err = os .NewSyscallError ("wsasend" , err )
517
+ }
505
518
return n , err
506
519
}
507
520
@@ -519,6 +532,9 @@ func (fd *netFD) writeTo(buf []byte, sa syscall.Sockaddr) (int, error) {
519
532
n , err := wsrv .ExecIO (o , "WSASendto" , func (o * operation ) error {
520
533
return syscall .WSASendto (o .fd .sysfd , & o .buf , 1 , & o .qty , 0 , o .sa , & o .o , nil )
521
534
})
535
+ if _ , ok := err .(syscall.Errno ); ok {
536
+ err = os .NewSyscallError ("wsasendto" , err )
537
+ }
522
538
return n , err
523
539
}
524
540
@@ -548,14 +564,17 @@ func (fd *netFD) acceptOne(rawsa []syscall.RawSockaddrAny, o *operation) (*netFD
548
564
})
549
565
if err != nil {
550
566
netfd .Close ()
567
+ if _ , ok := err .(syscall.Errno ); ok {
568
+ err = os .NewSyscallError ("acceptex" , err )
569
+ }
551
570
return nil , err
552
571
}
553
572
554
573
// Inherit properties of the listening socket.
555
574
err = syscall .Setsockopt (s , syscall .SOL_SOCKET , syscall .SO_UPDATE_ACCEPT_CONTEXT , (* byte )(unsafe .Pointer (& fd .sysfd )), int32 (unsafe .Sizeof (fd .sysfd )))
556
575
if err != nil {
557
576
netfd .Close ()
558
- return nil , err
577
+ return nil , os . NewSyscallError ( "setsockopt" , err )
559
578
}
560
579
561
580
return netfd , nil
@@ -581,7 +600,11 @@ func (fd *netFD) accept() (*netFD, error) {
581
600
// before AcceptEx could complete. These errors relate to new
582
601
// connection, not to AcceptEx, so ignore broken connection and
583
602
// try AcceptEx again for more connections.
584
- errno , ok := err .(syscall.Errno )
603
+ nerr , ok := err .(* os.SyscallError )
604
+ if ! ok {
605
+ return nil , err
606
+ }
607
+ errno , ok := nerr .Err .(syscall.Errno )
585
608
if ! ok {
586
609
return nil , err
587
610
}
0 commit comments