def primitiveResolverStartNameLookup(interp, s_frame, w_rcvr, hostname): try: host = rsocket.INETAddress(hostname, 80).get_host() plugin.set_last_lookup(host) except rsocket.GAIError, e: print "SocketError: %s" % e.get_msg() plugin.set_last_lookup(None)
def addr_from_object(family, space, w_address): if family == rsocket.AF_INET: w_host, w_port = space.unpackiterable(w_address, 2) host = space.str_w(w_host) port = space.int_w(w_port) port = make_ushort_port(space, port) return rsocket.INETAddress(host, port) if family == rsocket.AF_INET6: pieces_w = space.unpackiterable(w_address) if not (2 <= len(pieces_w) <= 4): raise TypeError("AF_INET6 address must be a tuple of length 2 " "to 4, not %d" % len(pieces_w)) host = space.str_w(pieces_w[0]) port = space.int_w(pieces_w[1]) port = make_ushort_port(space, port) if len(pieces_w) > 2: flowinfo = space.int_w(pieces_w[2]) else: flowinfo = 0 if len(pieces_w) > 3: scope_id = space.uint_w(pieces_w[3]) else: scope_id = 0 flowinfo = make_unsigned_flowinfo(space, flowinfo) return rsocket.INET6Address(host, port, flowinfo, scope_id) if rsocket.HAS_AF_UNIX and family == rsocket.AF_UNIX: return rsocket.UNIXAddress(space.str_w(w_address)) if rsocket.HAS_AF_NETLINK and family == rsocket.AF_NETLINK: w_pid, w_groups = space.unpackiterable(w_address, 2) return rsocket.NETLINKAddress(space.uint_w(w_pid), space.uint_w(w_groups)) raise RSocketError("unknown address family")
def addr_from_object(family, fd, space, w_address): if family == rsocket.AF_INET: w_host, w_port = space.unpackiterable(w_address, 2) host = idna_converter(space, w_host) port = space.int_w(w_port) port = make_ushort_port(space, port) return rsocket.INETAddress(host, port) if family == rsocket.AF_INET6: pieces_w = space.unpackiterable(w_address) if not (2 <= len(pieces_w) <= 4): raise oefmt( space.w_TypeError, "AF_INET6 address must be a tuple of length 2 " "to 4, not %d", len(pieces_w)) host = idna_converter(space, pieces_w[0]) port = space.int_w(pieces_w[1]) port = make_ushort_port(space, port) if len(pieces_w) > 2: flowinfo = space.int_w(pieces_w[2]) else: flowinfo = 0 if len(pieces_w) > 3: scope_id = space.uint_w(pieces_w[3]) else: scope_id = 0 flowinfo = make_unsigned_flowinfo(space, flowinfo) return rsocket.INET6Address(host, port, flowinfo, scope_id) if rsocket.HAS_AF_UNIX and family == rsocket.AF_UNIX: # Not using space.fsencode_w since Linux allows embedded NULs. if space.isinstance_w(w_address, space.w_unicode): w_address = space.fsencode(w_address) elif space.isinstance_w(w_address, space.w_bytearray): w_address = space.newbytes(space.charbuf_w(w_address)) bytelike = space.bytes_w(w_address) # getarg_w('y*', w_address) return rsocket.UNIXAddress(bytelike) if rsocket.HAS_AF_NETLINK and family == rsocket.AF_NETLINK: w_pid, w_groups = space.unpackiterable(w_address, 2) return rsocket.NETLINKAddress(space.uint_w(w_pid), space.uint_w(w_groups)) if rsocket.HAS_AF_PACKET and family == rsocket.AF_PACKET: pieces_w = space.unpackiterable(w_address) if not (2 <= len(pieces_w) <= 5): raise oefmt( space.w_TypeError, "AF_PACKET address must be a tuple of length 2 " "to 5, not %d", len(pieces_w)) ifname = space.text_w(pieces_w[0]) ifindex = rsocket.PacketAddress.get_ifindex_from_ifname(fd, ifname) protocol = space.int_w(pieces_w[1]) if len(pieces_w) > 2: pkttype = space.int_w(pieces_w[2]) else: pkttype = 0 if len(pieces_w) > 3: hatype = space.int_w(pieces_w[3]) else: hatype = 0 if len(pieces_w) > 4: haddr = space.text_w(pieces_w[4]) else: haddr = "" if len(haddr) > 8: raise oefmt(space.w_ValueError, "Hardware address must be 8 bytes or less") if protocol < 0 or protocol > 0xfffff: raise oefmt(space.w_OverflowError, "protoNumber must be 0-65535.") return rsocket.PacketAddress(ifindex, protocol, pkttype, hatype, haddr) raise RSocketError("unknown address family")
def open_socket(self, port): host = rsocket.INETAddress('', port) socket = rsocket.RSocket(rsocket.AF_INET, rsocket.SOCK_STREAM) socket.setsockopt_int(rsocket.SOL_SOCKET, rsocket.SO_REUSEADDR, 1) socket.bind(host) socket.listen(1) return socket
def run(directives): hostip = rsocket.gethostbyname('localhost') if use_pypy: host = rsocket.INETAddress(hostip.get_host(), 2222) socket = rsocket.RSocket(rsocket.AF_INET, rsocket.SOCK_STREAM) else: host = (hostip, 2222) socket = rsocket.socket(rsocket.AF_INET, rsocket.SOCK_STREAM) socket.bind(host) socket.listen(1) bufsize = 1048576 while True: if use_pypy: (client_sock_fd, client_addr) = socket.accept() client_sock = rsocket.fromfd(client_sock_fd, rsocket.AF_INET, rsocket.SOCK_STREAM) else: (client_sock, client_addr) = socket.accept() client_sock.send("Server ready!\n") print 'Client contacted' while True: msg = client_sock.recv(bufsize) if use_jit: jitdriver.jit_merge_point( \ # INTs ## REFs msg = msg, client_sock = client_sock # FLOATs ) if not msg: client_sock.close() break msg = msg.rstrip("\n") print "\nRECEIVED:\n%s" % msg if msg == "exit": client_sock.close() break try: ret_msg = directives.parse_and_run_command(msg) except RException as e: ret_msg = "ERROR: " + e.message client_sock.send(ret_msg) print "\nSENT:\n%s" % ret_msg return 1 # could be unindented, if not for rpython
def addr_from_object(family, fd, space, w_address): if family == rsocket.AF_INET: w_host, w_port = space.unpackiterable(w_address, 2) host = space.str_w(w_host) port = space.int_w(w_port) port = make_ushort_port(space, port) return rsocket.INETAddress(host, port) if family == rsocket.AF_INET6: pieces_w = space.unpackiterable(w_address) if not (2 <= len(pieces_w) <= 4): raise oefmt(space.w_TypeError, "AF_INET6 address must be a tuple of length 2 " "to 4, not %d", len(pieces_w)) host = space.str_w(pieces_w[0]) port = space.int_w(pieces_w[1]) port = make_ushort_port(space, port) if len(pieces_w) > 2: flowinfo = space.int_w(pieces_w[2]) else: flowinfo = 0 if len(pieces_w) > 3: scope_id = space.uint_w(pieces_w[3]) else: scope_id = 0 flowinfo = make_unsigned_flowinfo(space, flowinfo) return rsocket.INET6Address(host, port, flowinfo, scope_id) if rsocket.HAS_AF_UNIX and family == rsocket.AF_UNIX: return rsocket.UNIXAddress(space.str_w(w_address)) if rsocket.HAS_AF_NETLINK and family == rsocket.AF_NETLINK: w_pid, w_groups = space.unpackiterable(w_address, 2) return rsocket.NETLINKAddress(space.uint_w(w_pid), space.uint_w(w_groups)) if rsocket.HAS_AF_PACKET and family == rsocket.AF_PACKET: pieces_w = space.unpackiterable(w_address) if not (2 <= len(pieces_w) <= 5): raise oefmt(space.w_TypeError, "AF_PACKET address must be a tuple of length 2 " "to 5, not %d", len(pieces_w)) ifname = space.str_w(pieces_w[0]) ifindex = rsocket.PacketAddress.get_ifindex_from_ifname(fd, ifname) protocol = space.int_w(pieces_w[1]) if len(pieces_w) > 2: pkttype = space.int_w(pieces_w[2]) else: pkttype = 0 if len(pieces_w) > 3: hatype = space.int_w(pieces_w[3]) else: hatype = 0 if len(pieces_w) > 4: haddr = space.str_w(pieces_w[4]) else: haddr = "" if len(haddr) > 8: raise OperationError(space.w_ValueError, space.wrap( "Hardware address must be 8 bytes or less")) if protocol < 0 or protocol > 0xfffff: raise OperationError(space.w_OverflowError, space.wrap( "protoNumber must be 0-65535.")) return rsocket.PacketAddress(ifindex, protocol, pkttype, hatype, haddr) raise RSocketError("unknown address family")
def connect(self, w_bytes, port): try: inet = rsocket.INETAddress(w_bytes.unwrap_string(None), port) except rsocket.GAIError: try: inet = rsocket.INET6Address(w_bytes.unwrap_string(None), port) self.family = rsocket.AF_INET6 self.make_socket() except rsocket.GAIError: raise error.PrimitiveFailedError self.socket.setblocking(True) try: self.socket.connect(inet) except rsocket.SocketError: raise error.PrimitiveFailedError finally: self.socket.setblocking(False) self.state = Connected