@@ -42,9 +42,20 @@ func RecvFile(socket *os.File) (_ *os.File, Err error) {
4242 oob := make ([]byte , oobSpace )
4343
4444 sockfd := socket .Fd ()
45- n , oobn , _ , _ , err := unix .Recvmsg (int (sockfd ), name , oob , unix .MSG_CMSG_CLOEXEC )
45+ var (
46+ n , oobn int
47+ err error
48+ )
49+
50+ for {
51+ n , oobn , _ , _ , err = unix .Recvmsg (int (sockfd ), name , oob , unix .MSG_CMSG_CLOEXEC )
52+ if err != unix .EINTR { //nolint:errorlint // unix errors are bare
53+ break
54+ }
55+ }
56+
4657 if err != nil {
47- return nil , err
58+ return nil , os . NewSyscallError ( "recvmsg" , err )
4859 }
4960 if n >= MaxNameLen || oobn != oobSpace {
5061 return nil , fmt .Errorf ("recvfile: incorrect number of bytes read (n=%d oobn=%d)" , n , oobn )
@@ -115,5 +126,10 @@ func SendFile(socket *os.File, file *os.File) error {
115126// SendRawFd sends a specific file descriptor over the given AF_UNIX socket.
116127func SendRawFd (socket * os.File , msg string , fd uintptr ) error {
117128 oob := unix .UnixRights (int (fd ))
118- return unix .Sendmsg (int (socket .Fd ()), []byte (msg ), oob , nil , 0 )
129+ for {
130+ err := unix .Sendmsg (int (socket .Fd ()), []byte (msg ), oob , nil , 0 )
131+ if err != unix .EINTR { //nolint:errorlint // unix errors are bare
132+ return os .NewSyscallError ("sendmsg" , err )
133+ }
134+ }
119135}
0 commit comments