1
0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-10-02 00:41:44 +02:00
zsh/Functions/TCP/tcp_fd_handler
2004-01-06 13:56:12 +00:00

37 lines
839 B
Plaintext

local line name=${tcp_by_fd[$1]}
local TCP_HANDLER_ACTIVE=1
if [[ -n $name ]]
then
local TCP_INVALIDATE_ZLE
if (( $# > 2 )); then
zle -I
## debugging only
# print "Flags on the play:" ${argv[3,-1]}
else
TCP_INVALIDATE_ZLE=1
fi
if ! tcp_read -d -u $1; then
[[ -n $TCP_INVALIDATE_ZLE ]] && zle -I
print "[TCP fd $1 (session $name) gone awol; removing from poll list]" >& 2
zle -F $1
return 1
fi
return 0
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
return 1
fi
line="fd$1:$line"
local newline
while read -u $1 -t newline; do
line="${line}
fd$1:$newline"
done
fi
print -r - $line