linux关闭阻塞进程,C++ Linux的接受()阻塞插座关闭

用途:sock.shutdown (socket.SHUT_RD)

然后accept将返回EINVAL。不需要丑陋的十字线信号!

从Python文档: “注意close()释放资源与连接相关联,但不一定立即关闭连接。如果你想关闭及时连接,调用shutdown()close()之前。”

我多年前就遇到了这个问题,而编程C.但是我只找到了解决的今天,运行到同样的问题在Python和使用琢磨后信号(呸!),然后记住关于shutdown的笔记!

至于说不应该关闭/使用跨线程的套接字...在CPython中,全局解释器锁应该保护你(假设你使用文件对象而不是原始的整型文件描述符)。

下面是示例代码:

import socket, threading, time

sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

sock.setsockopt (socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

sock.bind (('', 8000))

sock.listen (5)

def child():

print ('child accept ...')

try: sock.accept()

except OSError as exc : print ('child exception %s' % exc)

print ('child exit')

threading.Thread (target = child).start()

time.sleep (1)

print ('main shutdown')

sock.shutdown (socket.SHUT_RD)

time.sleep (1)

print ('main close')

sock.close()

time.sleep (1)

print ('main exit')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值