@@ -266,7 +266,7 @@ fn socket_accept(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
266
266
267
267
let ( tcp_stream, addr) = match ret {
268
268
Ok ( ( socket, addr) ) => ( socket, addr) ,
269
- _ => return Err ( vm. new_type_error ( "" . to_string ( ) ) ) ,
269
+ Err ( s ) => return Err ( vm. new_os_error ( s . to_string ( ) ) ) ,
270
270
} ;
271
271
272
272
let socket = RefCell :: new ( Socket {
@@ -297,7 +297,10 @@ fn socket_recv(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
297
297
298
298
let mut buffer = vec ! [ 0u8 ; objint:: get_value( bufsize) . to_usize( ) . unwrap( ) ] ;
299
299
match socket. con {
300
- Some ( ref mut v) => v. read_exact ( & mut buffer) . unwrap ( ) ,
300
+ Some ( ref mut v) => match v. read_exact ( & mut buffer) {
301
+ Ok ( _) => ( ) ,
302
+ Err ( s) => return Err ( vm. new_os_error ( s. to_string ( ) ) ) ,
303
+ } ,
301
304
None => return Err ( vm. new_type_error ( "" . to_string ( ) ) ) ,
302
305
} ;
303
306
Ok ( vm. ctx . new_bytes ( buffer) )
@@ -320,7 +323,7 @@ fn socket_recvfrom(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
320
323
321
324
let addr = match ret {
322
325
Ok ( ( _size, addr) ) => addr,
323
- _ => return Err ( vm. new_type_error ( "" . to_string ( ) ) ) ,
326
+ Err ( s ) => return Err ( vm. new_os_error ( s . to_string ( ) ) ) ,
324
327
} ;
325
328
326
329
let addr_tuple = get_addr_tuple ( vm, addr) ?;
@@ -337,7 +340,10 @@ fn socket_send(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
337
340
let mut socket = get_socket ( zelf) ;
338
341
339
342
match socket. con {
340
- Some ( ref mut v) => v. write ( & objbytes:: get_value ( & bytes) ) . unwrap ( ) ,
343
+ Some ( ref mut v) => match v. write ( & objbytes:: get_value ( & bytes) ) {
344
+ Ok ( _) => ( ) ,
345
+ Err ( s) => return Err ( vm. new_os_error ( s. to_string ( ) ) ) ,
346
+ } ,
341
347
None => return Err ( vm. new_type_error ( "" . to_string ( ) ) ) ,
342
348
} ;
343
349
Ok ( vm. get_none ( ) )
@@ -360,22 +366,24 @@ fn socket_sendto(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
360
366
match socket. socket_kind {
361
367
SocketKind :: Dgram => {
362
368
match socket. con {
363
- Some ( ref mut v) => {
364
- if let Ok ( _) = v. send_to ( & objbytes:: get_value ( & bytes) , address_string) {
365
- Ok ( vm. get_none ( ) )
366
- } else {
367
- Err ( vm. new_type_error ( "socket failed" . to_string ( ) ) )
368
- }
369
- }
369
+ Some ( ref mut v) => match v. send_to ( & objbytes:: get_value ( & bytes) , address_string) {
370
+ Ok ( _) => Ok ( vm. get_none ( ) ) ,
371
+ Err ( s) => Err ( vm. new_os_error ( s. to_string ( ) ) ) ,
372
+ } ,
370
373
None => {
371
374
// Doing implicit bind
372
- if let Ok ( dgram) = UdpSocket :: bind ( "0.0.0.0:0" ) {
373
- if let Ok ( _) = dgram. send_to ( & objbytes:: get_value ( & bytes) , address_string) {
374
- socket. con = Some ( Connection :: UdpSocket ( dgram) ) ;
375
- return Ok ( vm. get_none ( ) ) ;
375
+ match UdpSocket :: bind ( "0.0.0.0:0" ) {
376
+ Ok ( dgram) => {
377
+ match dgram. send_to ( & objbytes:: get_value ( & bytes) , address_string) {
378
+ Ok ( _) => {
379
+ socket. con = Some ( Connection :: UdpSocket ( dgram) ) ;
380
+ Ok ( vm. get_none ( ) )
381
+ }
382
+ Err ( s) => Err ( vm. new_os_error ( s. to_string ( ) ) ) ,
383
+ }
376
384
}
385
+ Err ( s) => Err ( vm. new_os_error ( s. to_string ( ) ) ) ,
377
386
}
378
- Err ( vm. new_type_error ( "socket failed" . to_string ( ) ) )
379
387
}
380
388
}
381
389
}
@@ -402,7 +410,7 @@ fn socket_getsockname(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
402
410
403
411
match addr {
404
412
Ok ( addr) => get_addr_tuple ( vm, addr) ,
405
- _ => Err ( vm. new_type_error ( "" . to_string ( ) ) ) ,
413
+ Err ( s ) => Err ( vm. new_os_error ( s . to_string ( ) ) ) ,
406
414
}
407
415
}
408
416
0 commit comments