def close_sending(self):
"""First closing step, cut the sending part of the socket."""
try:
outmsg('# closing client connection send canal '
'(can still receive).')
self._sock.shutdown(socket.SHUT_WR)
except OSError:
raise ClosedSocketError('closed socket detected on send close')
python类SHUT_WR的实例源码
def _cleanupSocket(self):
"""Close the Connection's socket."""
try:
self._sock.shutdown(socket.SHUT_WR)
except:
return
try:
while True:
r, w, e = select.select([self._sock], [], [])
if not r or not self._sock.recv(1024):
break
except:
pass
self._sock.close()
def netcat(hostname, port, content):
""" Netcat equivalent to get data from Claymore. Normal http get doesn't works."""
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((hostname, port))
s.sendall(content)
s.shutdown(socket.SHUT_WR)
s.setblocking(0)
fulltext = ''
while 1:
ready = select.select([s], [], [], timeout)
if ready[0]:
data = s.recv(4096)
if data == "":
break
fulltext += data
except socket.error, e:
fulltext='{"error": true, "id": 0, "result": ["No client", "6", "0;0;0", "0;0", "0;0;0", "0;0", "0;0;0;0", "-;--", "0;0;0;0"]}'
print "Socket error: ", e
except IOError, e:
fulltext='{"error": true, "id": 0, "result": ["No client", "6", "0;0;0", "0;0", "0;0;0", "0;0", "0;0;0;0", "-;--", "0;0;0;0"]}'
print "IOError: error: ", e
finally:
s.close()
return parse_response(fulltext)
def on_shutdown(self, broker):
"""Shut down the write end of the logging socket."""
LOG.debug('%r.on_shutdown()', self)
self._wsock.shutdown(socket.SHUT_WR)
self._wsock.close()
self.transmit_side.close()
def shutdown_request(self, request):
"""Called to shutdown and close an individual request."""
try:
#explicitly shutdown. socket.close() merely releases
#the socket and waits for GC to perform the actual close.
request.shutdown(socket.SHUT_WR)
except socket.error:
pass #some platforms may raise ENOTCONN here
self.close_request(request)
def get_from_socket(site_name,query,socket_ip,socket_port):
"""
Function_name : get_from_socket (collect the query data from the socket)
Args: site_name (poller on which monitoring data is to be collected)
Kwargs: query (query for which data to be collectes from nagios.)
Return : None
raise
Exception: SyntaxError,socket error
"""
#socket_path = "/omd/sites/%s/tmp/run/live" % site_name
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
machine = site_name[:-8]
s.connect((socket_ip, socket_port))
#s.connect(socket_path)
s.send(query)
s.shutdown(socket.SHUT_WR)
output = ''
wait_string= ''
while True:
try:
out = s.recv(100000000)
except socket.timeout,e:
err=e.args[0]
print 'socket timeout ..Exiting'
if err == 'timed out':
sys.exit(1)
if not len(out):
break;
output += out
return output
def shutdown_request(self, request):
"""Called to shutdown and close an individual request."""
try:
#explicitly shutdown. socket.close() merely releases
#the socket and waits for GC to perform the actual close.
request.shutdown(socket.SHUT_WR)
except socket.error:
pass #some platforms may raise ENOTCONN here
self.close_request(request)
def shutdown_request(self, request):
"""Called to shutdown and close an individual request."""
try:
#explicitly shutdown. socket.close() merely releases
#the socket and waits for GC to perform the actual close.
request.shutdown(socket.SHUT_WR)
except socket.error:
pass #some platforms may raise ENOTCONN here
self.close_request(request)
def check_bot(self, botname, port, path, user):
bot = botname
if not botname in data:
addlog('starting '+ botname)
os.chdir(path)
proc = subprocess.Popen('screen -dmS "'+ botname +'" su '+ user +' -c "bash launch.sh -P '+ str(port) +'"',shell=True).wait()
addlog(botname + ' has been successfully started')
print(colored(botname + ' has been successfully started\n',"blue"))
spid = screen_pid(botname)
data[botname] = {"pid": spid}
time.sleep(5)
while True:
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(5.0)
s.connect(('localhost', int(port)))
s.shutdown(socket.SHUT_WR)
s.close()
except:
try:
os.kill(int(data[botname][pid]), 9)
except Exception as e:
a = 'a'
wipe = subprocess.Popen(["screen", "-wipe"], stdout=subprocess.PIPE)
del data[botname]
addlog(botname + ' was crashed and it has been successfully restarted.')
print(botname + ' was crashed and it has been successfully restarted.')
botname = bot+get_random_key(2)
proc = subprocess.Popen('screen -dmS "'+ botname +'" su '+ user +' -c "bash launch.sh -P '+ str(port) +'"',shell=True).wait()
spid = screen_pid(botname)
data[botname] = {"pid": spid}
time.sleep(15)
def _cleanupSocket(self):
"""Close the Connection's socket."""
try:
self._sock.shutdown(socket.SHUT_WR)
except:
return
try:
while True:
r, w, e = select.select([self._sock], [], [])
if not r or not self._sock.recv(1024):
break
except:
pass
self._sock.close()
def frameparser_sender(s,msg):
LOGGER.info("Sending {0} bytes to frameparser".format(len(msg)))
s.sendall(msg)
s.shutdown(socket.SHUT_WR)
def _cleanupSocket(self):
"""Close the Connection's socket."""
try:
self._sock.shutdown(socket.SHUT_WR)
except:
return
try:
while True:
r, w, e = select.select([self._sock], [], [])
if not r or not self._sock.recv(1024):
break
except:
pass
self._sock.close()
def netcat(hostname, port, content):
mntr = ''
conn = socket(AF_INET, SOCK_STREAM)
conn.connect((hostname, port))
conn.sendall(content)
conn.shutdown(SHUT_WR)
while True:
data = conn.recv(1024)
if data == '':
break
mntr += data
conn.close()
return mntr
def __dispatch(addr, port, msg):
"""
worker
:param addr:
:param port:
:param msg: list (thread obj, message, return value)
:return:
"""
print 'opening socket'
clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
clientsocket.settimeout(2)
try:
clientsocket.connect((addr, port))
except:
msg[2] = "couldn't connect to socket"
return
print 'sending'
n = clientsocket.sendall(msg[1])
clientsocket.shutdown(socket.SHUT_WR)
print 'sent', n
buffer = ""
while(1):
buf = clientsocket.recv(1024)
if len(buf) > 0:
buffer += buf
else:
print 'received %d bytes'%len(buffer)
msg[2] = buffer
break
clientsocket.close()
print 'done'
def shutdown_request(self, request):
"""Called to shutdown and close an individual request."""
try:
#explicitly shutdown. socket.close() merely releases
#the socket and waits for GC to perform the actual close.
request.shutdown(socket.SHUT_WR)
except socket.error:
pass #some platforms may raise ENOTCONN here
self.close_request(request)
def connect(self, server):
"""Creates a (ssl) socket and connects to the server. Not using asyncore's connect-function because it sucks."""
# sockets are garbage collected, but if the connection isn't closed it might fail
try:
self.socket.shutdown(socket.SHUT_WR)
self.socket.close()
del self.socket
except Exception:
pass
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
if self.use_ssl:
try:
self.socket.setblocking(True)
self.socket = ssl.wrap_socket(self.socket)
except (ssl.SSLWantReadError, ssl.SSLWantWriteError) as e:
log.debug(e)
self._handshake()
except ssl.SSLError as e:
log.error(e)
self.exit()
return
finally:
self.socket.setblocking(False)
log.info('Connecting to %s', self.current_server)
self.socket.settimeout(30)
self.socket.connect(server)
self.handle_connect_event()
def disconnect(self):
if self.connected:
try:
self.sock.shutdown(socket.SHUT_WR)
self.sock.close()
self.connected = False
except SocketError as e:
print("Server must have disconnected first!")
print("Disconnection successful!")
else:
print("Nothing to disconnect!")
def server_shutdown(self):
self.is_listening = False
for c in connections:
c.close()
try:
self.server_proc.shutdown(socket.SHUT_WR)
except OSError as e1:
if e1.args[0] == 57:
print("No clients connected?")
self.server_proc.close()
def _cleanupSocket(self):
"""Close the Connection's socket."""
try:
self._sock.shutdown(socket.SHUT_WR)
except:
return
try:
while True:
r, w, e = select.select([self._sock], [], [])
if not r or not self._sock.recv(1024):
break
except:
pass
self._sock.close()
def test_rd_partial(self):
self.server.send(b'test')
self.server.shutdown(socket.SHUT_WR)
with self.assertRaises(rxpwn.PartialReadError) as ecm:
rd(b'\n')
self.assertEqual(ecm.exception.data, b'test')