partial write

対象が端末、ネットワーク、SVR4 のストリーム装置などの装置では、
write(2) は書き込み要求したバイト数より少ない値を返すことがある。
フロー制御などのためである。
(詳解UNIXプログラミング 12.8)

dual.py

def writeall(fd, data):
  while len(data) != 0:
    n = os.write(fd, data)
    data = buffer(data, n)

APUE 12.8 には同様の writen() 関数が書かれている。