mirror of
				https://github.com/ossrs/srs.git
				synced 2025-03-09 15:49:59 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			51 lines
		
	
	
	
		
			990 B
		
	
	
	
		
			Tcl
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
	
		
			990 B
		
	
	
	
		
			Tcl
		
	
	
	
	
	
#!/usr/bin/tclsh
 | 
						|
 | 
						|
proc SpawnEchoServer {fd host port} {
 | 
						|
	fconfigure $fd -encoding binary -translation binary -blocking no -buffering none
 | 
						|
	fileevent $fd readable "EchoBack $fd"
 | 
						|
	# --- puts stderr "Connected: [fconfigure $fd -peername]"
 | 
						|
}
 | 
						|
 | 
						|
proc EchoBack {fd} {
 | 
						|
 | 
						|
	# --- puts stderr "READ-READY"
 | 
						|
 | 
						|
	while 1 {
 | 
						|
 | 
						|
		# --- puts stderr "READING 4096"
 | 
						|
		set r [read $fd 4096]
 | 
						|
		if {$r == ""} {
 | 
						|
			if {[eof $fd]} {
 | 
						|
				# --- puts stderr "EOF. Closing"
 | 
						|
				close $fd
 | 
						|
				return
 | 
						|
			}
 | 
						|
 | 
						|
			# --- puts stderr "SPURIOUS, giving up read"
 | 
						|
			return
 | 
						|
		}
 | 
						|
 | 
						|
		# Set blocking for a short moment of sending
 | 
						|
		# in order to prevent losing data that must wait
 | 
						|
 | 
						|
		# --- puts stderr "SENDING [string bytelength $r] bytes"
 | 
						|
		fconfigure $fd -blocking yes
 | 
						|
		puts -nonewline $fd $r
 | 
						|
		fconfigure $fd -blocking no
 | 
						|
 | 
						|
		if {[fblocked $fd]} {
 | 
						|
			# --- puts stderr "NO MORE DATA"
 | 
						|
			# Nothing more to read
 | 
						|
			return
 | 
						|
		}
 | 
						|
 | 
						|
		# --- puts stderr "AGAIN"
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
socket -server SpawnEchoServer $argv
 | 
						|
puts stderr "SERVER READY"
 | 
						|
 | 
						|
vwait tk
 |