1 # -*- encoding: binary -*-
2 # internal implementation details here, do not rely on them in your code
5 class MogileFS::Socket < Kgio::Socket
6 include MogileFS::SocketCommon
8 def self.start(host, port)
9 sock = super(Socket.sockaddr_in(port, host))
10 sock.post_init(host, port)
13 def self.tcp(host, port, timeout = 5)
14 sock = start(host, port)
15 unless sock.kgio_wait_writable(timeout)
17 raise MogileFS::Timeout, 'socket connect timeout'
22 def timed_read(len, dst = "", timeout = 5)
23 case rc = kgio_tryread(len, dst)
25 kgio_wait_readable(timeout) or unreadable_socket!(timeout)
31 def timed_peek(len, dst, timeout = 5)
32 case rc = kgio_trypeek(len, dst)
34 kgio_wait_readable(timeout) or unreadable_socket!(timeout)
40 def timed_write(buf, timeout = 5)
43 case rc = kgio_trywrite(buf)
45 kgio_wait_writable(timeout) or
46 request_truncated!(written, expect, timeout)
48 written += expect - rc.bytesize