delete punchd socket on SIGINT

This commit is contained in:
Christian Ulrich 2020-07-28 00:17:45 +02:00
parent 5d08473d86
commit e8d06b5982
No known key found for this signature in database
GPG Key ID: 8241BE099775A097
1 changed files with 15 additions and 3 deletions

View File

@ -8,6 +8,8 @@ import tcp_syni
from strutils import format, join from strutils import format, join
from nativesockets import setSockOptInt from nativesockets import setSockOptInt
const PunchdSocket = "/tmp/punchd.socket"
type type
# Requests # Requests
TcpSyniConnect = object TcpSyniConnect = object
@ -23,6 +25,11 @@ type
srcPorts: array[3, Port] srcPorts: array[3, Port]
seqNums: seq[uint32] seqNums: seq[uint32]
Sigint = object of CatchableError
proc handleSigint() {.noconv.} =
raise newException(Sigint, "received SIGINT")
proc handleRequest(line: string, unixSock: AsyncSocket) {.async.} = proc handleRequest(line: string, unixSock: AsyncSocket) {.async.} =
var id: string var id: string
var sock: AsyncSocket var sock: AsyncSocket
@ -77,12 +84,17 @@ proc handleUsers(sock: AsyncSocket) {.async.} =
asyncCheck handleRequests(user) asyncCheck handleRequests(user)
proc main() = proc main() =
removeFile("/tmp/punchd.socket") setControlCHook(handleSigint)
removeFile(PunchdSocket)
let unixSocket = newAsyncSocket(AF_UNIX, SOCK_STREAM, IPPROTO_IP) let unixSocket = newAsyncSocket(AF_UNIX, SOCK_STREAM, IPPROTO_IP)
unixSocket.bindUnix("/tmp/punchd.socket") unixSocket.bindUnix(PunchdSocket)
unixSocket.listen() unixSocket.listen()
asyncCheck handleUsers(unixSocket) asyncCheck handleUsers(unixSocket)
runForever() try:
runForever()
except Sigint:
removeFile(PunchdSocket)
when isMainModule: when isMainModule:
main() main()