Skip to content

Let connection_lost close the underlying socket#918

Merged
bdraco merged 12 commits into
python-zeroconf:masterfrom
bdraco:supress_bt
Jul 19, 2021
Merged

Let connection_lost close the underlying socket#918
bdraco merged 12 commits into
python-zeroconf:masterfrom
bdraco:supress_bt

Conversation

@bdraco
Copy link
Copy Markdown
Member

@bdraco bdraco commented Jul 19, 2021

Fixes #917

  • The socket was closed during shutdown before asyncio's connection_lost
    handler had a chance to close it which resulted in a traceback on
    win32.

@codecov-commenter
Copy link
Copy Markdown

codecov-commenter commented Jul 19, 2021

Codecov Report

Merging #918 (1602977) into master (b6eaf72) will not change coverage.
The diff coverage is 100.00%.

Impacted file tree graph

@@            Coverage Diff            @@
##            master      #918   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files           22        22           
  Lines         2313      2312    -1     
  Branches       383       382    -1     
=========================================
- Hits          2313      2312    -1     
Impacted Files Coverage Δ
zeroconf/_core.py 100.00% <100.00%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update b6eaf72...1602977. Read the comment docs.

@bdraco bdraco changed the title Suppress log backtrace when shutdown during startup Wait for connection_lost before closing the underlying socket Jul 19, 2021
Comment thread zeroconf/_core.py Outdated
@bdraco bdraco changed the title Wait for connection_lost before closing the underlying socket Let connection_lost to close the underlying socket Jul 19, 2021
@bdraco bdraco changed the title Let connection_lost to close the underlying socket Let connection_lost close the underlying socket Jul 19, 2021
@bdraco
Copy link
Copy Markdown
Member Author

bdraco commented Jul 19, 2021

Testing to verify the underlying sockets still get closed.

import zeroconf

zeroconf.Zeroconf().close()
zeroconf.Zeroconf().close()
zeroconf.Zeroconf().close()
zeroconf.Zeroconf().close()
zeroconf.Zeroconf().close()

strace -o outout python3 run.py
grep 'socket(' outout

socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 3
socket(AF_NETLINK, SOCK_RAW|SOCK_CLOEXEC, NETLINK_ROUTE) = 4
socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 4
socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 4
socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 4
socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 4
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 4
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 5
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 6
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 7
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 4
socket(AF_NETLINK, SOCK_RAW|SOCK_CLOEXEC, NETLINK_ROUTE) = 3
socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 3
socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 3
socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 3
socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 3
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 3
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 5
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 6
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 7
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 3
socket(AF_NETLINK, SOCK_RAW|SOCK_CLOEXEC, NETLINK_ROUTE) = 4
socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 4
socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 4
socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 4
socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 4
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 4
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 5
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 6
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 7
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 3
socket(AF_NETLINK, SOCK_RAW|SOCK_CLOEXEC, NETLINK_ROUTE) = 4
socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 4
socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 4
socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 4
socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 4
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 4
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 5
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 6
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 7
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 3
socket(AF_NETLINK, SOCK_RAW|SOCK_CLOEXEC, NETLINK_ROUTE) = 4
socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 4
socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 4
socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 4
socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 4
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 4
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 5
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 6
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC, IPPROTO_IP) = 7

@bdraco bdraco marked this pull request as ready for review July 19, 2021 04:07
@bdraco bdraco merged commit 919b096 into python-zeroconf:master Jul 19, 2021
@bdraco bdraco deleted the supress_bt branch July 19, 2021 04:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Sample code causes Windows OSError #10038

2 participants