mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-30 05:40:58 +01:00 
			
		
		
		
	18202: New TCP function system plus small error message change in ztcp.
This commit is contained in:
		
							parent
							
								
									809ab19dff
								
							
						
					
					
						commit
						5c1f3b65a6
					
				
					 27 changed files with 2139 additions and 5 deletions
				
			
		
							
								
								
									
										67
									
								
								Functions/TCP/tcp_send
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								Functions/TCP/tcp_send
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,67 @@ | |||
| emulate -L zsh | ||||
| setopt extendedglob cbases | ||||
| 
 | ||||
| local opt quiet all sess fd nonewline | ||||
| local -a sessions write_fds | ||||
| 
 | ||||
| while getopts "al:nqs:" opt; do | ||||
|     case $opt in | ||||
| 	(a) all=1 | ||||
| 	    ;; | ||||
| 	(n) nonewline=-n | ||||
| 	    ;; | ||||
| 	(q) quiet=1 | ||||
| 	    ;; | ||||
| 	(l) for sess in ${(s.,.)OPTARG}; do | ||||
| 	        if [[ -z ${tcp_by_name[$sess]} ]]; then | ||||
| 		    print "$0: no such session: $sess" >&2 | ||||
| 		    return 1 | ||||
| 		fi | ||||
| 		sessions+=($sess) | ||||
| 	    done | ||||
| 	    ;; | ||||
| 	(s) if [[ -z $tcp_by_name[$OPTARG] ]]; then | ||||
|                 print "No such session: $OPTARG" >&2 | ||||
| 		return 1 | ||||
| 	    fi | ||||
| 	    sessions+=($OPTARG) | ||||
| 	    ;; | ||||
| 	(*) [[ $opt != '?' ]] && print Unhandled option, complain: $opt >&2 | ||||
|             return 1 | ||||
| 	    ;; | ||||
|     esac | ||||
| done | ||||
| (( OPTIND > 1 )) && shift $(( OPTIND - 1 )) | ||||
| 
 | ||||
| if [[ -n $all ]]; then | ||||
|     sessions=(${(k)tcp_by_name}) | ||||
| elif (( ! ${#sessions} )); then | ||||
|     sessions=($TCP_SESS) | ||||
| fi | ||||
| if (( ! $#sessions )); then | ||||
|     if [[ -z $quiet ]]; then | ||||
| 	print "No current TCP session open." >&2 | ||||
|     fi | ||||
|     return 1 | ||||
| fi | ||||
| 
 | ||||
| # Writing on a TCP connection closed by the remote end can cause SIGPIPE. | ||||
| # The following test is reasonably robust, though in principle we can | ||||
| # mistake a SIGPIPE owing to another fd.  That doesn't seem like a big worry. | ||||
| # `emulate -L zsh' will already have set localtraps. | ||||
| local TCP_FD_CLOSED | ||||
| trap 'TCP_FD_CLOSED=1' PIPE | ||||
| 
 | ||||
| local TCP_SESS | ||||
| 
 | ||||
| for TCP_SESS in $sessions; do | ||||
|     fd=${tcp_by_name[$TCP_SESS]} | ||||
|     print $nonewline -r -- $* >&$fd | ||||
|     if [[ $? -ne 0 || -n $TCP_FD_CLOSED ]]; then | ||||
| 	print "Session ${TCP_SESS}: fd $fd unusable." >&2 | ||||
| 	unset TCP_FD_CLOSED | ||||
|     fi | ||||
|     if [[ -n $TCP_OUTPUT ]]; then | ||||
| 	tcp_output -P "$TCP_OUTPUT" -S $TCP_SESS -F $fd -q "${(j. .)*}" | ||||
|     fi | ||||
| done | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue