1
1
use std:: io:: ErrorKind :: WouldBlock ;
2
- use std:: sync:: { Arc , Mutex } ;
3
2
use std:: time:: Duration ;
4
3
5
4
use byteorder:: { BigEndian , ByteOrder } ;
@@ -8,34 +7,24 @@ use std::net::{TcpListener, TcpStream};
8
7
use std:: str;
9
8
use std:: thread;
10
9
11
- fn bind ( connections : Arc < Mutex < Vec < TcpStream > > > ) {
12
- thread:: spawn ( move || {
13
- let listener = TcpListener :: bind ( "127.0.0.1:2593" ) . unwrap ( ) ;
14
-
15
- for stream in listener. incoming ( ) {
16
- let mut connections = connections. lock ( ) . unwrap ( ) ;
17
- let stream = stream. unwrap ( ) ;
18
- let addr = stream. peer_addr ( ) . unwrap ( ) ;
19
- stream
20
- . set_read_timeout ( Some ( Duration :: from_nanos ( 1 ) ) )
21
- . expect ( "set_read_timeout call failed" ) ;
22
- println ! ( "Connection received from: {}" , addr) ;
23
- connections. push ( stream) ;
24
- }
25
- } ) ;
26
- }
27
-
28
10
pub fn start ( ) {
29
- let connections: Vec < TcpStream > = vec ! [ ] ;
30
-
31
- let connections = Arc :: new ( Mutex :: new ( connections) ) ;
11
+ let listener = TcpListener :: bind ( "127.0.0.1:2593" ) . unwrap ( ) ;
12
+ listener
13
+ . set_nonblocking ( true )
14
+ . expect ( "Cannot set non-blocking" ) ;
32
15
33
- bind ( Arc :: clone ( & connections) ) ;
16
+ let mut connections: Vec < TcpStream > = vec ! [ ] ;
34
17
35
18
loop {
36
19
thread:: sleep ( Duration :: from_millis ( 1 ) ) ;
37
20
38
- let mut connections = connections. lock ( ) . unwrap ( ) ;
21
+ if let Ok ( ( stream, addr) ) = listener. accept ( ) {
22
+ println ! ( "Connection received from: {}" , addr) ;
23
+ stream
24
+ . set_read_timeout ( Some ( Duration :: from_nanos ( 1 ) ) )
25
+ . expect ( "set_read_timeout call failed" ) ;
26
+ connections. push ( stream) ;
27
+ }
39
28
40
29
connections. retain_mut ( |stream| {
41
30
let mut buffer = [ 0 ; 1024 ] ;
0 commit comments