def __init__(self, ip, port, logger_object): self.ip = ip self.port = port sock = text_socket.text_socket(socket.AF_INET, socket.SOCK_STREAM) self.prebind(sock, logger_object) self.bind((ip, port)) if not ip: self.log_info('Computing default hostname', 'warning') hostname = socket.gethostname() try: ip = socket.gethostbyname(hostname) except socket.error: raise ValueError( 'Could not determine IP address for hostname %s, ' 'please try setting an explicit IP address in the "port" ' 'setting of your [inet_http_server] section. For example, ' 'instead of "port = 9001", try "port = 127.0.0.1:9001."' % hostname) try: self.server_name = socket.gethostbyaddr (ip)[0] except socket.error: self.log_info('Cannot do reverse lookup', 'warning') self.server_name = ip # use the IP address as the "hostname" self.postbind()
def create_socket(self, family, type): from supervisor.medusa import text_socket self.family_and_type = family, type self.socket = text_socket.text_socket(family, type) self.socket.setblocking(0) self._fileno = self.socket.fileno() self.add_channel()
def create_and_bind(self): sock = text_socket.text_socket(socket.AF_INET, socket.SOCK_STREAM) try: sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(self.addr()) except: sock.close() raise return sock
def create_and_bind(self): if os.path.exists(self.path): os.unlink(self.path) sock = text_socket.text_socket(socket.AF_UNIX, socket.SOCK_STREAM) try: sock.bind(self.addr()) self._chown() self._chmod() except: sock.close() if os.path.exists(self.path): os.unlink(self.path) raise return sock
def __init__(self, socketname, sockchmod, sockchown, logger_object): self.ip = socketname self.port = socketname # XXX this is insecure. We really should do something like # http://developer.apple.com/samplecode/CFLocalServer/listing6.html # (see also http://developer.apple.com/technotes/tn2005/tn2083.html#SECUNIXDOMAINSOCKETS) # but it would be very inconvenient for the user to need to get all # the directory setup right. tempname = "%s.%d" % (socketname, os.getpid()) try: os.unlink(tempname) except OSError: pass while 1: sock = text_socket.text_socket(socket.AF_UNIX, socket.SOCK_STREAM) try: sock.bind(tempname) os.chmod(tempname, sockchmod) try: # hard link os.link(tempname, socketname) except OSError: # Lock contention, or stale socket. used = self.checkused(socketname) if used: # cooperate with 'openhttpserver' in supervisord raise socket.error(errno.EADDRINUSE) # Stale socket -- delete, sleep, and try again. msg = "Unlinking stale socket %s\n" % socketname sys.stderr.write(msg) try: os.unlink(socketname) except: pass sock.close() time.sleep(.3) continue else: try: os.chown(socketname, sockchown[0], sockchown[1]) except OSError as why: if why.args[0] == errno.EPERM: msg = ('Not permitted to chown %s to uid/gid %s; ' 'adjust "sockchown" value in config file or ' 'on command line to values that the ' 'current user (%s) can successfully chown') raise ValueError(msg % (socketname, repr(sockchown), pwd.getpwuid( os.geteuid())[0], ), ) else: raise self.prebind(sock, logger_object) break finally: try: os.unlink(tempname) except OSError: pass self.server_name = '<unix domain socket>' self.postbind()
def create_socket(self, family, type): self.family_and_type = family, type self.socket = text_socket.text_socket(family, type) self.socket.setblocking(0) self._fileno = self.socket.fileno() self.add_channel()
def connect(self): # pragma: no cover self.sock = text_socket.text_socket(socket.AF_UNIX, socket.SOCK_STREAM) # we abuse the host parameter as the socketname self.sock.connect(self.socketfile)
def __init__(self, socketname, sockchmod, sockchown, logger_object): self.ip = socketname self.port = socketname # XXX this is insecure. We really should do something like # http://developer.apple.com/samplecode/CFLocalServer/listing6.html # (see also http://developer.apple.com/technotes/tn2005/tn2083.html#SECUNIXDOMAINSOCKETS) # but it would be very inconvenient for the user to need to get all # the directory setup right. tempname = "%s.%d" % (socketname, os.getpid()) try: os.unlink(tempname) except OSError: pass while 1: sock = text_socket.text_socket(socket.AF_UNIX, socket.SOCK_STREAM) try: sock.bind(tempname) os.chmod(tempname, sockchmod) try: # hard link os.link(tempname, socketname) except OSError: # Lock contention, or stale socket. used = self.checkused(socketname) if used: # cooperate with 'openhttpserver' in supervisord raise socket.error(errno.EADDRINUSE) # Stale socket -- delete, sleep, and try again. msg = "Unlinking stale socket %s\n" % socketname sys.stderr.write(msg) try: os.unlink(socketname) except: pass sock.close() time.sleep(.3) continue else: try: os.chown(socketname, sockchown[0], sockchown[1]) except OSError as why: if why.args[0] == errno.EPERM: msg = ( 'Not permitted to chown %s to uid/gid %s; ' 'adjust "sockchown" value in config file or ' 'on command line to values that the ' 'current user (%s) can successfully chown') raise ValueError( msg % ( socketname, repr(sockchown), pwd.getpwuid(os.geteuid())[0], ), ) else: raise self.prebind(sock, logger_object) break finally: try: os.unlink(tempname) except OSError: pass self.server_name = '<unix domain socket>' self.postbind()
def connect(self): # pragma: no cover self.sock = text_socket.text_socket(socket.AF_INET if sys.platform.startswith('win') else socket.AF_INET, socket.SOCK_STREAM) # we abuse the host parameter as the socketname self.sock.connect(self.socketfile)