如何中止 LocalServerSocket.accept
Posted
技术标签:
【中文标题】如何中止 LocalServerSocket.accept【英文标题】:How to abort LocalServerSocket.accept 【发布时间】:2011-12-15 19:48:28 【问题描述】:如何在后台线程中中止/中断 LocalServerSocket 等待方法 LocalServerSocker.accept() 中的连接?
我尝试从另一个线程调用 close() 方法,但它似乎不起作用。
【问题讨论】:
【参考方案1】:在 android 项目中为它打开了一张票:http://code.google.com/p/android/issues/detail?id=29939。
似乎问题已被 Google 确认,因为第一条评论是:
我认为我们应该重写它以使用相同的底层 libcore 东西,并免费获得中断行为。
解决方法可以是从另一个线程向 LocalServerSocket 发送自定义关闭命令以取消阻止接受。
【讨论】:
你的意思是我需要写一个LocalServerSocket的子类并添加一个参数来杀死线程? 不,在我的情况下,是连接到本地套接字的单独线程解除了accept()的阻塞,因此LocalServerSocket线程可以关闭套接字并退出。【参考方案2】:用这个代替localSocket.close
:(需要API 21+)
try
Os.shutdown(localSocket.fileDescriptor, OsConstants.SHUT_RDWR)
catch (e: ErrnoException)
if (e.errno != OsConstants.EBADF) throw e // suppress fd already closed
【讨论】:
以上是关于如何中止 LocalServerSocket.accept的主要内容,如果未能解决你的问题,请参考以下文章