曾与蒿藜同雨露,한때 잡초와 쑥과 함께 비와 이슬을 나누던 곳이 이제는 소나무와 삼나무와 함께 서리와 눈을 견뎌내고 있다.终随松柏到冰霜.かつては雑草やヨモギと共に雨や露を分かち合っていたが、今では松やヒノキと共に霜や雪に耐えている。曾与蒿藜同雨露,Once sharing rain and dew with weeds and wormwood, now enduring frost and snow with pines and cypresses.终随松柏到冰霜.曾与蒿藜同雨露한때 잡초와 쑥과 함께 비와 이슬을 나누던 곳이 이제는 소나무와 삼나무와 함께 서리와 눈을 견뎌내고 있다.,终随松柏到冰霜.譖セ荳手珍阯懷酔髮ィ髴イ�檎サ磯囂譚セ譟丞芦蜀ー髴�曾与蒿藜同雨露,鏇句笌钂胯棞鍚岄洦闇诧紝缁堥殢鏉炬煆鍒板啺闇�终随松柏到冰霜.曾与蒿藜同雨露,한때 잡초와 쑥과 함께 비와 이슬을 나누던 곳이 이제는 소나무와 삼나무와 함께 서리와 눈을 견뎌내고 있다.终随松柏到冰霜.曾与蒿藜同雨露,终随松柏到冰霜.
#
#
#
# $Id$
import select
import fcntl
import os
class NonBlockingFile:
def __init__(self, fd):
# Keep a copy of the file descriptor
self.fd = fd
fcntl.fcntl(self.fd.fileno(), fcntl.F_SETFL, os.O_NDELAY)
# Set the callback-related stuff
self.read_fd_set = []
self.write_fd_set = []
self.exc_fd_set = []
self.user_data = None
self.callback = None
def set_callback(self, read_fd_set, write_fd_set, exc_fd_set,
user_data, callback):
self.read_fd_set = read_fd_set
# Make the objects non-blocking
for f in self.read_fd_set:
fcntl.fcntl(f.fileno(), fcntl.F_SETFL, os.O_NDELAY)
self.write_fd_set = write_fd_set
self.exc_fd_set = exc_fd_set
self.user_data = user_data
self.callback = callback
def read(self, amt=0):
while 1:
status_changed = 0
readfds = self.read_fd_set + [self.fd]
writefds = self.write_fd_set
excfds = self.exc_fd_set
print "Calling select", readfds
readfds, writefds, excfds = select.select(readfds, writefds, excfds)
print "Select returned", readfds, writefds, excfds
if self.fd in readfds:
# Our own file descriptor has changed status
# Mark this, but also try to call the callback with the rest
# of the file descriptors that changed status
status_changed = 1
readfds.remove(self.fd)
if self.callback and (readfds or writefds or excfds):
self.callback(readfds, writefds, excfds, self.user_data)
if status_changed:
break
print "Returning"
return self.fd.read(amt)
def write(self, data):
return self.fd.write(data)
def __getattr__(self, name):
return getattr(self.fd, name)
def callback(r, w, e, user_data):
print "Callback called", r, w, e
print r[0].read()
if __name__ == '__main__':
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("localhost", 5555))
f = s.makefile()
ss = NonBlockingFile(f)
s2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s2.connect(("localhost", 5556))
f = s2.makefile()
ss.set_callback([f], [], [], None, callback)
xx = ss.read()
print len(xx)