Coverage41C icon indicating copy to clipboard operation
Coverage41C copied to clipboard

Команда stop не освобождает порт (сокет) в linux

Open kuzyara opened this issue 9 months ago • 3 comments

После запуска dbgs делаю Coverage41C start -i DefAlias -u http://127.0.0.1:1550 -o /test/genericCoverage.xml потом в соседнем терминале Coverage41C stop -i DefAlias -u http://127.0.0.1:1550 потом в первом терминале, как только служба завершается, повторно вызываю start - получаю вот что

# Coverage41C start -i DefAlias -u http://127.0.0.1:1550/ -o /test/genericCoverage.xml
java.io.IOException: org.scalasbt.ipcsocket.NativeErrorException: [98] Address already in use
        at org.scalasbt.ipcsocket.UnixDomainServerSocket.bind(UnixDomainServerSocket.java:140)
        at org.scalasbt.ipcsocket.UnixDomainServerSocket.<init>(UnixDomainServerSocket.java:114)
        at org.scalasbt.ipcsocket.UnixDomainServerSocket.<init>(UnixDomainServerSocket.java:88)
        at com.clouds42.Commands.CoverServer.getServerSocket(CoverServer.java:70)
        at com.clouds42.Commands.CoverageCommand.call(CoverageCommand.java:128)
        at com.clouds42.Commands.CoverageCommand.call(CoverageCommand.java:62)
        at picocli.CommandLine.executeUserObject(CommandLine.java:1953)
        at picocli.CommandLine.access$1300(CommandLine.java:145)
        at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2358)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2352)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2314)
        at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179)
        at picocli.CommandLine$RunLast.execute(CommandLine.java:2316)
        at picocli.CommandLine.execute(CommandLine.java:2078)
        at com.clouds42.Coverage41C.main(Coverage41C.java:47)
Caused by: org.scalasbt.ipcsocket.NativeErrorException: [98] Address already in use
        at org.scalasbt.ipcsocket.JNAUnixDomainSocketLibraryProvider.bind(UnixDomainSocketLibrary.java:178)
        at org.scalasbt.ipcsocket.UnixDomainServerSocket.bind(UnixDomainServerSocket.java:136)
        ... 14 more

Таким образом повторный запуск через start заканчивается ошибкой.

При остановке приложения видим что не закрывается сокет, хотя в винде закрывается и там такой проблемы нет.

# ss -a
Netid       State           Recv-Q       Send-Q                     Local Address:Port                  Peer Address:Port       Process
nl          UNCONN          0            0                                   rtnl:915                               *
nl          UNCONN          0            0                                   rtnl:kernel                            *
nl          UNCONN          4352         0                                tcpdiag:ss/1334                           *
nl          UNCONN          768          0                                tcpdiag:kernel                            *
nl          UNCONN          0            0                                   xfrm:kernel                            *
nl          UNCONN          0            0                                  audit:kernel                            *
nl          UNCONN          0            0                              fiblookup:kernel                            *
nl          UNCONN          0            0                                    nft:kernel                            *
nl          UNCONN          0            0                                 uevent:kernel                            *
nl          UNCONN          0            0                                   genl:kernel                            *
u_str       LISTEN          0            4096                  /tmp/.X11-unix/X99 3513007                          * 0
u_str       LISTEN          0            4096                 @/tmp/.X11-unix/X99 3513006                          * 0
tcp         LISTEN          0            128                            127.0.0.1:1554                       0.0.0.0:*
tcp         TIME-WAIT       0            0                              127.0.0.1:54432                    127.0.0.1:1554
tcp         TIME-WAIT       0            0                              127.0.0.1:36460                    127.0.0.1:1554

В коде подозрительного ничего не вижу https://github.com/1c-syntax/Coverage41C/blob/4de4f8cd6ace643ef5abd0851678fcad5edd33af/src/main/java/com/clouds42/Commands/CoverServer.java#L66-L72

kuzyara avatar Feb 10 '25 04:02 kuzyara

Не совсем понял, причём тут докер?

nixel2007 avatar Feb 10 '25 08:02 nixel2007

@nixel2007 докер тут не при чем, имелось ввиду создание сокета в линуксе

https://stackoverflow.com/questions/18849754/why-doesnt-socket-close-free-up-the-bound-port

попробовал socket.setReuseAddress(true); - не помогло

могу конечно ошибаться, но такой ошибки в винде нет

kuzyara avatar Feb 11 '25 05:02 kuzyara

в итоге выяснил в чём дело нужно чтобы удалялся файл /tmp/coverage41c/DefAlias_http___127.0.0.1_1550.sock

kuzyara avatar Feb 19 '25 11:02 kuzyara