
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 是高危行为。 |