@@ -128,11 +128,7 @@ fn socket_connect(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
128128 required =[ ( zelf, None ) , ( address, Some ( vm. ctx. tuple_type( ) ) ) ]
129129) ;
130130
131- let elements =get_elements ( address) ;
132- let host = objstr:: get_value ( & elements[ 0 ] ) ;
133- let port = objint:: get_value ( & elements[ 1 ] ) ;
134-
135- let address_string =format ! ( "{}:{}" , host, port. to_string( ) ) ;
131+ let address_string =get_address_string ( vm, address) ?;
136132
137133let mut mut_obj = zelf. borrow_mut ( ) ;
138134
@@ -157,11 +153,7 @@ fn socket_bind(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
157153 required =[ ( zelf, None ) , ( address, Some ( vm. ctx. tuple_type( ) ) ) ]
158154) ;
159155
160- let elements =get_elements ( address) ;
161- let host = objstr:: get_value ( & elements[ 0 ] ) ;
162- let port = objint:: get_value ( & elements[ 1 ] ) ;
163-
164- let address_string =format ! ( "{}:{}" , host, port. to_string( ) ) ;
156+ let address_string =get_address_string ( vm, address) ?;
165157
166158let mut mut_obj = zelf. borrow_mut ( ) ;
167159
@@ -179,6 +171,30 @@ fn socket_bind(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
179171}
180172}
181173
174+ fn get_address_string (
175+ vm : & mut VirtualMachine ,
176+ address : & PyObjectRef ,
177+ ) ->Result < String , PyObjectRef > {
178+ let args =PyFuncArgs {
179+ args : get_elements ( address) . to_vec ( ) ,
180+ kwargs : vec ! [ ] ,
181+ } ;
182+ arg_check ! (
183+ vm,
184+ args,
185+ required =[
186+ ( host, Some ( vm. ctx. str_type( ) ) ) ,
187+ ( port, Some ( vm. ctx. int_type( ) ) )
188+ ]
189+ ) ;
190+
191+ Ok ( format ! (
192+ "{}:{}" ,
193+ objstr:: get_value( host) ,
194+ objint:: get_value( port) . to_string( )
195+ ) )
196+ }
197+
182198fn socket_listen ( vm : & mut VirtualMachine , args : PyFuncArgs ) ->PyResult {
183199Ok ( vm. get_none ( ) )
184200}