我们从Python开源项目中,提取了以下6个代码示例,用于说明如何使用socket.setsockopt()。
def brute_zmq(host, port=5555, user=None, password=None, db=0): context = zmq.Context() # Configure socket = context.socket(zmq.SUB) socket.setsockopt(zmq.SUBSCRIBE, b"") # All topics socket.setsockopt(zmq.LINGER, 0) # All topics socket.RCVTIMEO = 1000 # timeout: 1 sec # Connect socket.connect("tcp://%s:%s" % (host, port)) # Try to receive try: socket.recv() return True except Exception: return False finally: socket.close()
def handle_zmq(host, port=5555, extra_config=None): # log.debug(" * Connection to ZeroMQ: %s : %s" % (host, port)) context = zmq.Context() # Configure socket = context.socket(zmq.SUB) socket.setsockopt(zmq.SUBSCRIBE, b"") # All topics socket.setsockopt(zmq.LINGER, 0) # All topics socket.RCVTIMEO = 1000 # timeout: 1 sec # Connect socket.connect("tcp://%s:%s" % (host, port)) # Try to receive try: socket.recv() return True except Exception: return False finally: socket.close()
def handle_close(self): try: delete_set = self.getgrouplist() for multicast_addr in delete_set: self.setsockopt(socket.SOL_IP, socket.IP_DROP_MEMBERSHIP, socket.inet_aton(multicast_addr) + socket.inet_aton('0.0.0.0')) if self.callback_obj is not None: self.callback_obj.on_leave(self, multicast_addr) with self.lock: self.multicastSet = Set([]) except Exception as e: print e print 'asyncUdp close called' asyncore.dispatcher.close(self) AsyncController.instance().discard(self) try: if self.callback_obj is not None: self.callback_obj.on_stopped(self) except Exception as e: print e traceback.print_exc() # noinspection PyMethodOverriding
def join(self, multicast_addr): with self.lock: if multicast_addr not in self.multicastSet: self.setsockopt(socket.SOL_IP, socket.IP_ADD_MEMBERSHIP, socket.inet_aton(multicast_addr) + socket.inet_aton(self.bind_addr)) self.multicastSet.add(multicast_addr) if self.callback_obj is not None: self.callback_obj.on_join(self, multicast_addr) # for RECEIVER to stop receiving datagram from the multicast group
def leave(self, multicast_addr): with self.lock: try: if multicast_addr in self.multicastSet: self.setsockopt(socket.SOL_IP, socket.IP_DROP_MEMBERSHIP, socket.inet_aton(multicast_addr) + socket.inet_aton('0.0.0.0')) self.multicastSet.discard(multicast_addr) if self.callback_obj is not None: self.callback_obj.on_leave(self, multicast_addr) except Exception as e: print e
def __init__(self, port, callback_obj, ttl=1, enable_loopback=False, bind_addr=''): asyncore.dispatcher.__init__(self) # self.lock = threading.RLock() self.MAX_MTU = 1500 self.callback_obj = None self.port = port self.multicastSet = Set([]) self.lock = threading.RLock() self.ttl = ttl self.enable_loopback = enable_loopback if callback_obj is not None and isinstance(callback_obj, IUdpCallback): self.callback_obj = callback_obj else: raise Exception('callback_obj is None or not an instance of IUdpCallback class') try: self.create_socket(socket.AF_INET, socket.SOCK_DGRAM) self.set_reuse_addr() try: socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) except AttributeError: pass # Some systems don't support SO_REUSEPORT # for both SENDER and RECEIVER to restrict the region self.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, self.ttl) # for SENDER to choose whether to use loop back if self.enable_loopback: self.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_LOOP, 1) else: self.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_LOOP, 0) self.bind_addr = bind_addr if self.bind_addr is None or self.bind_addr == '': self.bind_addr = socket.gethostbyname(socket.gethostname()) # for both SENDER and RECEIVER to bind to specific network adapter self.setsockopt(socket.SOL_IP, socket.IP_MULTICAST_IF, socket.inet_aton(self.bind_addr)) # for RECEIVE to receive from multiple multicast groups self.bind(('', port)) except Exception as e: print e traceback.print_exc() self.sendQueue = Queue.Queue() # thread-safe queue AsyncController.instance().add(self) if self.callback_obj is not None: self.callback_obj.on_started(self) # Even though UDP is connectionless this is called when it binds to a port