@@ -66,7 +66,7 @@ def self.sockaddr_class_for_socket(socket)
66
66
end
67
67
end
68
68
69
- def self . accept ( source , new_class )
69
+ def self . internal_accept ( source , new_class , exception )
70
70
raise IOError , 'socket has been closed' if source . closed?
71
71
72
72
sockaddr = sockaddr_class_for_socket ( source ) . new
@@ -79,7 +79,13 @@ def self.accept(source, new_class)
79
79
. accept ( source . fileno , sockaddr . pointer , size_p )
80
80
end
81
81
82
- Error . read_error ( 'accept(2)' , source ) if fd < 0
82
+ if fd < 0
83
+ if exception
84
+ Error . read_error ( 'accept(2)' , source )
85
+ else
86
+ return :wait_readable
87
+ end
88
+ end
83
89
84
90
socket = new_class . for_fd ( fd )
85
91
@@ -91,19 +97,16 @@ def self.accept(source, new_class)
91
97
sockaddr . free
92
98
end
93
99
end
100
+ private_class_method :internal_accept
101
+
102
+ def self . accept ( source , new_class )
103
+ internal_accept ( source , new_class , true )
104
+ end
94
105
95
106
def self . accept_nonblock ( source , new_class , exception )
96
107
source . fcntl ( ::Fcntl ::F_SETFL , ::Fcntl ::O_NONBLOCK )
97
108
98
- begin
99
- accept ( source , new_class )
100
- rescue Errno ::EAGAIN
101
- if exception
102
- raise ::IO ::EAGAINWaitReadable
103
- else
104
- return :wait_readable
105
- end
106
- end
109
+ internal_accept ( source , new_class , exception )
107
110
end
108
111
109
112
def self . listen ( source , backlog )
0 commit comments