diff options
Diffstat (limited to 'Functions/TCP')
-rw-r--r-- | Functions/TCP/tcp_fd_handler | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/Functions/TCP/tcp_fd_handler b/Functions/TCP/tcp_fd_handler index 8774a2666..9f2e8cd09 100644 --- a/Functions/TCP/tcp_fd_handler +++ b/Functions/TCP/tcp_fd_handler @@ -1,6 +1,6 @@ -local line name=${tcp_by_fd[$1]} +local line fd=$1 sess=${tcp_by_fd[$1]} local TCP_HANDLER_ACTIVE=1 -if [[ -n $name ]] +if [[ -n $sess ]] then local TCP_INVALIDATE_ZLE if (( $# > 2 )); then @@ -10,10 +10,14 @@ then else TCP_INVALIDATE_ZLE=1 fi - if ! tcp_read -d -u $1; then + if ! tcp_read -d -u $fd; then + if (( ${+functions[tcp_on_awol]} )); then + tcp_on_awol $sess $fd + (( $? == 100 )) || return $? + fi [[ -n $TCP_INVALIDATE_ZLE ]] && zle -I - print "[TCP fd $1 (session $name) gone awol; removing from poll list]" >& 2 - zle -F $1 + print "[TCP fd $fd (session $sess) gone awol; removing from poll list]" >& 2 + zle -F $fd return 1 fi return 0 @@ -21,16 +25,16 @@ else zle -I # Handle fds not in the TCP set similarly. # This does the drain thing, to try and get as much data out as possible. - if ! read -u $1 line; then - print "[Reading on $1 failed; removing from poll list]" >& 2 - zle -F $1 + if ! read -u $fd line; then + print "[Reading on $fd failed; removing from poll list]" >& 2 + zle -F $fd return 1 fi - line="fd$1:$line" + line="fd$fd:$line" local newline - while read -u $1 -t newline; do + while read -u $fd -t newline; do line="${line} -fd$1:$newline" +fd$fd:$newline" done fi print -r - $line |