我们从Python开源项目中,提取了以下17个代码示例,用于说明如何使用socket.SOCK_NONBLOCK。
def testInitNonBlocking(self): v = linux_version() if v < (2, 6, 28): self.skipTest("Linux kernel 2.6.28 or higher required, not %s" % ".".join(map(str, v))) # reinit server socket self.serv.close() self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM | socket.SOCK_NONBLOCK) self.port = support.bind_port(self.serv) self.serv.listen(1) # actual testing start = time.time() try: self.serv.accept() except socket.error: pass end = time.time() self.assertTrue((end - start) < 1.0, "Error creating with non-blocking mode.")
def __init__(self, port): self.sockets = {} self.names = {} self.socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM | socket.SOCK_NONBLOCK) self.selector = DefaultSelector() self.socket_server.bind(("", port)) self._running = False
def _compiler_build(compiler, code, time_limit_ns, memory_limit_bytes, process_limit): loop = get_event_loop() sandbox = await _sandbox_pool.get() try: await compiler.prepare(sandbox, code.encode()) output_file = path.join(sandbox.in_dir, 'output') mkfifo(output_file) with socket(AF_UNIX, SOCK_STREAM | SOCK_NONBLOCK) as cgroup_sock: cgroup_sock.bind(path.join(sandbox.in_dir, 'cgroup')) cgroup_sock.listen() build_task = loop.create_task(compiler.build( sandbox, output_file='/in/output', cgroup_file='/in/cgroup')) others_task = gather(read_pipe(output_file, _MAX_OUTPUT), wait_cgroup(cgroup_sock, build_task, time_limit_ns, memory_limit_bytes, process_limit)) package, status = await build_task output, (time_usage_ns, memory_usage_bytes) = await others_task return package, output.decode(encoding='utf-8', errors='replace'), \ time_usage_ns, memory_usage_bytes finally: _sandbox_pool.put_nowait(sandbox)
def checkNonblock(self, s, nonblock=True, timeout=0.0): if nonblock: self.assertTrue(s.type & socket.SOCK_NONBLOCK) self.assertEqual(s.gettimeout(), timeout) else: self.assertFalse(s.type & socket.SOCK_NONBLOCK) self.assertEqual(s.gettimeout(), None)
def test_SOCK_NONBLOCK(self): v = linux_version() if v < (2, 6, 28): self.skipTest("Linux kernel 2.6.28 or higher required, not %s" % ".".join(map(str, v))) # a lot of it seems silly and redundant, but I wanted to test that # changing back and forth worked ok with socket.socket(socket.AF_INET, socket.SOCK_STREAM | socket.SOCK_NONBLOCK) as s: self.checkNonblock(s) s.setblocking(1) self.checkNonblock(s, False) s.setblocking(0) self.checkNonblock(s) s.settimeout(None) self.checkNonblock(s, False) s.settimeout(2.0) self.checkNonblock(s, timeout=2.0) s.setblocking(1) self.checkNonblock(s, False) # defaulttimeout t = socket.getdefaulttimeout() socket.setdefaulttimeout(0.0) with socket.socket() as s: self.checkNonblock(s) socket.setdefaulttimeout(None) with socket.socket() as s: self.checkNonblock(s, False) socket.setdefaulttimeout(2.0) with socket.socket() as s: self.checkNonblock(s, timeout=2.0) socket.setdefaulttimeout(None) with socket.socket() as s: self.checkNonblock(s, False) socket.setdefaulttimeout(t)
def testInitNonBlocking(self): # reinit server socket self.serv.close() self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM | socket.SOCK_NONBLOCK) self.port = support.bind_port(self.serv) self.serv.listen(1) # actual testing start = time.time() try: self.serv.accept() except socket.error: pass end = time.time() self.assertTrue((end - start) < 1.0, "Error creating with non-blocking mode.")
def test_SOCK_NONBLOCK(self): # a lot of it seems silly and redundant, but I wanted to test that # changing back and forth worked ok with socket.socket(socket.AF_INET, socket.SOCK_STREAM | socket.SOCK_NONBLOCK) as s: self.checkNonblock(s) s.setblocking(1) self.checkNonblock(s, False) s.setblocking(0) self.checkNonblock(s) s.settimeout(None) self.checkNonblock(s, False) s.settimeout(2.0) self.checkNonblock(s, timeout=2.0) s.setblocking(1) self.checkNonblock(s, False) # defaulttimeout t = socket.getdefaulttimeout() socket.setdefaulttimeout(0.0) with socket.socket() as s: self.checkNonblock(s) socket.setdefaulttimeout(None) with socket.socket() as s: self.checkNonblock(s, False) socket.setdefaulttimeout(2.0) with socket.socket() as s: self.checkNonblock(s, timeout=2.0) socket.setdefaulttimeout(None) with socket.socket() as s: self.checkNonblock(s, False) socket.setdefaulttimeout(t)
def testInitNonBlocking(self): # reinit server socket self.serv.close() self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM | socket.SOCK_NONBLOCK) self.port = support.bind_port(self.serv) self.serv.listen(1) # actual testing start = time.time() try: self.serv.accept() except OSError: pass end = time.time() self.assertTrue((end - start) < 1.0, "Error creating with non-blocking mode.")
def test_check_resolved_sock_type(self): # Ensure we ignore extra flags in sock.type. if hasattr(socket, 'SOCK_NONBLOCK'): sock = socket.socket(type=socket.SOCK_STREAM | socket.SOCK_NONBLOCK) with sock: base_events._check_resolved_address(sock, ('1.2.3.4', 1)) if hasattr(socket, 'SOCK_CLOEXEC'): sock = socket.socket(type=socket.SOCK_STREAM | socket.SOCK_CLOEXEC) with sock: base_events._check_resolved_address(sock, ('1.2.3.4', 1))
def _check_resolved_address(sock, address): # Ensure that the address is already resolved to avoid the trap of hanging # the entire event loop when the address requires doing a DNS lookup. family = sock.family if family == socket.AF_INET: host, port = address elif family == socket.AF_INET6: host, port = address[:2] else: return type_mask = 0 if hasattr(socket, 'SOCK_NONBLOCK'): type_mask |= socket.SOCK_NONBLOCK if hasattr(socket, 'SOCK_CLOEXEC'): type_mask |= socket.SOCK_CLOEXEC # Use getaddrinfo(flags=AI_NUMERICHOST) to ensure that the address is # already resolved. try: socket.getaddrinfo(host, port, family=family, type=(sock.type & ~type_mask), proto=sock.proto, flags=socket.AI_NUMERICHOST) except socket.gaierror as err: raise ValueError("address must be resolved (IP address), got %r: %s" % (address, err))
def judge(self, sandbox, package): loop = get_event_loop() executable = await package.install(sandbox) stdin_file = path.join(sandbox.in_dir, 'stdin') mkfifo(stdin_file) stdout_file = path.join(sandbox.in_dir, 'stdout') mkfifo(stdout_file) stderr_file = path.join(sandbox.in_dir, 'stderr') mkfifo(stderr_file) with socket(AF_UNIX, SOCK_STREAM | SOCK_NONBLOCK) as cgroup_sock: cgroup_sock.bind(path.join(sandbox.in_dir, 'cgroup')) cgroup_sock.listen() execute_task = loop.create_task(executable.execute( sandbox, stdin_file='/in/stdin', stdout_file='/in/stdout', stderr_file='/in/stderr', cgroup_file='/in/cgroup')) others_task = gather( loop.run_in_executor(None, self.do_stdin, stdin_file), loop.run_in_executor(None, self.do_stdout, stdout_file), read_pipe(stderr_file, MAX_STDERR_SIZE), wait_cgroup(cgroup_sock, execute_task, self.time_limit_ns, self.memory_limit_bytes, self.process_limit)) execute_status = await execute_task _, correct, stderr, (time_usage_ns, memory_usage_bytes) = \ await others_task if memory_usage_bytes >= self.memory_limit_bytes: status = STATUS_MEMORY_LIMIT_EXCEEDED score = 0 elif time_usage_ns >= self.time_limit_ns: status = STATUS_TIME_LIMIT_EXCEEDED score = 0 elif execute_status: status = STATUS_RUNTIME_ERROR score = 0 elif not correct: status = STATUS_WRONG_ANSWER score = 0 else: status = STATUS_ACCEPTED score = self.score return status, score, time_usage_ns, memory_usage_bytes, stderr