10
errno.EINPROGRESS, errno.EALREADY,
11
errno.EAGAIN, errno.EWOULDBLOCK,
12
errno.EINTR, errno.EDEADLK,
13
errno.EBUSY, errno.ENOBUFS,
18
errno.ECONNABORTED, errno.EPIPE,
19
errno.ECONNREFUSED, errno.EBADF,
20
errno.ESHUTDOWN, errno.ENOTCONN,
21
errno.ECONNRESET, errno.ETIMEDOUT,
25
errno_unavailable = set((
26
errno.ECONNREFUSED, errno.EHOSTUNREACH,
31
fcntl.fcntl(fd, fcntl.F_SETFL, os.O_NONBLOCK)
38
fcntl.fcntl(fd, fcntl.F_SETFL, os.O_NDELAY)
43
if not async(sys.stdin):
44
print >> sys.stderr, "could not set stdin/stdout non blocking"
53
data = sys.stdin.read(4096)
55
if e.args[0] in errno_block:
58
elif e.args[0] in errno_fatal:
59
print >> sys.stderr, "fatal error while reading on stdin : %s" % str(e)
65
line,received = received.split('\n',1)
70
reader = _reader().next
73
def write (data='',left=''):
77
number = sys.stdout.write(left)
81
if e.args[0] in errno_block:
83
elif e.args[0] in errno_fatal:
84
# this may not send anything ...
85
print >> sys.stderr, "fatal error while reading on stdin : %s" % str(e)
93
r, w, x = select.select([sys.stdin], [], [sys.stdin,], timeout)
95
if e.args[0] in errno_block:
97
elif e.args[0] in errno_fatal:
98
# this may not send anything ...
99
print >> sys.stderr, "fatal error during select : %s" % str(e)
103
# this may not send anything ...
104
print >> sys.stderr, "unexpected error during select : %s" % str(e)
118
announce = ['announce route 192.0.2.%d next-hop 10.0.0.1\n' % ip for ip in range(1,255)]
123
received = read(1.0) # wait for a maximum of one second
125
# do something with the data received
128
more,announce = announce[:10],announce[10:]
131
leftover = write(''.join(more))
133
# echo back what we got