質問編集履歴
3
bind追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
|
17
17
|
|
18
18
|
|
19
|
-
```
|
19
|
+
```python3
|
20
20
|
|
21
21
|
global is_recv
|
22
22
|
|
@@ -44,11 +44,13 @@
|
|
44
44
|
|
45
45
|
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
46
46
|
|
47
|
+
sock.bind('', port)
|
48
|
+
|
47
49
|
sock.setsockopt(socket.IPPROTO_IP,
|
48
50
|
|
49
|
-
|
51
|
+
socket.IP_ADD_MEMBERSHIP,
|
50
52
|
|
51
|
-
|
53
|
+
socket.inet_aton(addr) + socket.inet_aton('0.0.0.0'))
|
52
54
|
|
53
55
|
|
54
56
|
|
@@ -106,6 +108,8 @@
|
|
106
108
|
|
107
109
|
is_recv = False
|
108
110
|
|
111
|
+
t.join()
|
112
|
+
|
109
113
|
print('end: time={}'.format(datetime.now()))
|
110
114
|
|
111
115
|
```
|
2
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -109,3 +109,13 @@
|
|
109
109
|
print('end: time={}'.format(datetime.now()))
|
110
110
|
|
111
111
|
```
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
## 追記
|
116
|
+
|
117
|
+
|
118
|
+
|
119
|
+
sleepの8秒は決められた値ではなく変動するため、終了時間を予想してtimeoutを設定する、ということはできません。
|
120
|
+
|
121
|
+
timeoutを0.1秒など小さな値にしてtry~exceptを使用すれば、is_recv=False直後にスレッド終了が可能ですが、Exceptionを大量発生させるのもスマートではないため、他の方法を模索しています。
|
1
誤字
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
socket.recvを強制終了したい
|
1
|
+
python3でsocket.recvを強制終了したい
|
test
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
例えば以下のコードですと、理想は待機後の8秒で終了することですが、実際はタイムアウトが2回発生した後の10秒後に終了してしまいます。
|
10
10
|
|
11
|
-
どうにかして8秒で終了させられないでしょうか。よろしくお願いします。
|
11
|
+
どうにかして8秒で強制終了させられないでしょうか。よろしくお願いします。
|
12
12
|
|
13
13
|
|
14
14
|
|