Skip to content

ソケットの終了処理の改善#357

Merged
sayurin merged 6 commits intomasterfrom
closesocket
Dec 11, 2021
Merged

ソケットの終了処理の改善#357
sayurin merged 6 commits intomasterfrom
closesocket

Conversation

@sayurin
Copy link
Copy Markdown
Member

@sayurin sayurin commented Dec 11, 2021

これまでDoClose()およびSocketContext::Close()が存在していたが、呼び出しが不足すればsocket leak、複数回呼べばdouble-freeが発生する危うい実装であった。
これらの処理をSocketContextのデストラクタに移動することで、解放処理を確実に1回のみ実行する。

また、SocketContext::Close()ではソケット一覧を表すmapを管理していたが、解放タイミングをデストラクタに任せると問題が発生する。ソケット一覧が必要となる理由はWSAAsyncSelect()が使われているからであるが、これをWSAEventSelect()に移行する。
WSAEventSelect()に移行したことにより、メッセージループ依存が解消され、ソケット用Windowも不要となる。

@sayurin sayurin self-assigned this Dec 11, 2021
@sayurin sayurin merged commit 49858e6 into master Dec 11, 2021
@sayurin sayurin deleted the closesocket branch December 11, 2021 20:33
@sayurin sayurin added this to the v5.7 milestone Dec 18, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant