質問編集履歴

3

bind追加

2019/04/04 05:07

投稿

y.nakamura
y.nakamura

スコア190

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
- socket.IP_ADD_MEMBERSHIP,
51
+ socket.IP_ADD_MEMBERSHIP,
50
52
 
51
- socket.inet_aton(addr) + socket.inet_aton('0.0.0.0'))
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

追記

2019/04/04 05:07

投稿

y.nakamura
y.nakamura

スコア190

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

誤字

2019/04/02 23:54

投稿

y.nakamura
y.nakamura

スコア190

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