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