By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
449,242 Members | 1,173 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 449,242 IT Pros & Developers. It's quick & easy.

To Stop a Process that is Waiting on socket.accept()

P: n/a
I am having problem to kill the following script completely. The script
basically does the following. The main thread creates a new thread,
which does a completely useless thing, and then starts excepting for a
connection via socket.

# start
import pickle
import signal
import simplejson
import socket
import sys
import threading
import time

counter = 0

class WorkerThread(threading.Thread):
def run(self):
global counter
while True:
counter += 1
time.sleep(10)

worker_thread = WorkerThread()
worker_thread.start()

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('', 2727))
server.listen(2)

def cleanup(signal, frame):
print "die now"
worker_thread.join(1)
server.shutdown(socket.SHUT_RDWR)
sys.exit(0)
signal.signal(signal.SIGINT, cleanup)

while True:
channel, details = server.accept()
stats = { 'key': "value" }
s = simplejson.dumps(stats)
channel.send(s)
channel.close()
# end

The way I can think of right now is to kill the script using Ctrl+C.
Hence, the signal handler in the code. However, the interpreter
complains:
---start---
Traceback (most recent call last):
File "ex_server.py", line 35, in ?
channel, details = server.accept()
File "/usr/lib/python2.4/socket.py", line 169, in accept
sock, addr = self._sock.accept()
File "ex_server.py", line 30, in cleanup
server.shutdown(SHUT_RDWR)
NameError: global name 'SHUT_RDWR' is not defined
---end---

Can anybody suggest a better way to do this?

Thank you.
Buhi

Oct 27 '06 #1
Share this Question
Share on Google+
2 Replies


P: n/a
mumebuhi wrote:
I am having problem to kill the following script completely. The script
basically does the following. The main thread creates a new thread,
which does a completely useless thing, and then starts excepting for a
connection via socket.

# start
import pickle
import signal
import simplejson
import socket
import sys
import threading
import time

counter = 0

class WorkerThread(threading.Thread):
def run(self):
global counter
while True:
counter += 1
time.sleep(10)

worker_thread = WorkerThread()
worker_thread.start()

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('', 2727))
server.listen(2)

def cleanup(signal, frame):
print "die now"
worker_thread.join(1)
server.shutdown(socket.SHUT_RDWR)
sys.exit(0)
signal.signal(signal.SIGINT, cleanup)

while True:
channel, details = server.accept()
stats = { 'key': "value" }
s = simplejson.dumps(stats)
channel.send(s)
channel.close()
# end

The way I can think of right now is to kill the script using Ctrl+C.
Hence, the signal handler in the code. However, the interpreter
complains:
---start---
Traceback (most recent call last):
File "ex_server.py", line 35, in ?
channel, details = server.accept()
File "/usr/lib/python2.4/socket.py", line 169, in accept
sock, addr = self._sock.accept()
File "ex_server.py", line 30, in cleanup
server.shutdown(SHUT_RDWR)
NameError: global name 'SHUT_RDWR' is not defined
---end---

Can anybody suggest a better way to do this?
You haven't copied the code you are actually running. The program above
may or may not work, but compare the server.shutdown line in the
traceback with the server.shutdown line in the program and you'll see
they aren't the same.

regards
Steve
--
Steve Holden +44 150 684 7255 +1 800 494 3119
Holden Web LLC/Ltd http://www.holdenweb.com
Skype: holdenweb http://holdenweb.blogspot.com
Recent Ramblings http://del.icio.us/steve.holden

Oct 27 '06 #2

P: n/a
Hi Steve,

The output is as the following (excluding the "---start---" and
"---end---"):
---start---
die now
Traceback (most recent call last):
File "../../../scratch/python/tmp.py", line 39, in ?
channel, details = server.accept()
File "/usr/lib/python2.4/socket.py", line 169, in accept
sock, addr = self._sock.accept()
File "../../../scratch/python/tmp.py", line 33, in cleanup
server.shutdown(socket.SHUT_RDWR)
File "<string>", line 1, in shutdown
socket.error: (128, 'Transport endpoint is not connected')
---end---

I copied and pasted the previous posting and the above is the output.
It is the actual code. Sorry if I don't get your point.
Buhi

Oct 27 '06 #3

This discussion thread is closed

Replies have been disabled for this discussion.