1
zj299792458 2018 年 1 月 2 日 via iPhone
程序都退出了,关一个 socket 还能有多危险……
|
2
0Kelvin 2018 年 1 月 2 日
写个 log 再关?
|
3
v2byy OP @zj299792458 抛个异常出来总不好吧
|
7
lifespy 2018 年 1 月 2 日
.close
|
8
veelog 2018 年 1 月 2 日 via iPhone
发个信号给线程,通知退出
|
9
wwqgtxx 2018 年 1 月 2 日
试试在另一个线程去 close 这个 socket,这个取决于底层 API 实现,在有些实现中是可以这样干的
|
10
firstway 2018 年 1 月 3 日
应该可以从另外线程 close,block 的这个可能会读到 EOF 或这异常(可能语言相关)。
|
11
hjc4869 2018 年 1 月 3 日 via iPhone
双向 shutdown
|
12
sjx95 2018 年 1 月 3 日
不知道 lz 是什么语言哦,Java 的话 catch 一个 InterruptedException 就可以了,C 的话我不清楚,估计需要用 SIGINT 之类的?另外把 socket 存在一张表里面,直接 abort 线程然后从父线程关闭 socket 应该也可以。
C++的话,我记得以前我好像是用的 asio 异步+lambda 表达式模拟的同步,平时用 io_service.run()阻塞线程,需要关闭的时候就在另一个线程调用 io_service.cancle()。其实也挺丑的。 |
13
snnn 2018 年 1 月 3 日 via Android
任何线程都可以 shutdown 这个 socket。一旦这个 socket 被关闭,block 在 receive 那里的线程会继续往下走的
|
15
janxin 2018 年 1 月 3 日
close socket 一般会出错或者异常,catch 或者处理一下即可。
|
17
6ufq0VLZn0DDkL80 2018 年 1 月 3 日
receive 的时候挂个超时。
|
18
6ufq0VLZn0DDkL80 2018 年 1 月 3 日
服务端在两处 close socket 是高危行为。
|