问题描述:什么是死锁?
死锁发生在当一个服务器和客户端同时试图往一个连接上写东西或同时从一个连接上读的时候。在这种情况下,没有进程可以得到任何数据(如果它们都正在读),因此,如果它们正在写,向外的buffer会被充满,结果他们就好象被骗了,什么都做不了。
示例服务器代码:
import socket,traceback host="" port=51423 sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) sock.bind((host,port)) sock.listen(1) while True: try: clientsock,clientaddr= sock.accept() except KeyboardInterrupt: raise except: traceback.print_exc() continue try: print("Got connection from ",clientsock.getpeername) while True: data = clientsock.recv(4096) if not len(data): break clientsock.sendall(data) except (KeyboardInterrupt,SystemExit): raise except: traceback.print_exc() try: clientsock.close() except KeyboardInterrupt: raise except: traceback.print_exc()