Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
kuzyara opened this issue Feb 10, 2025 · 3 comments

Comments

@kuzyara
Copy link
Contributor

kuzyara commented Feb 10, 2025

После запуска 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

В коде подозрительного ничего не вижу

String pipeName = Utils.getPipeName(getConnectionOptions());
if(serverSocket == null) {
if (isWindows) {
serverSocket = new Win32NamedPipeServerSocket(pipeName, false, Win32SecurityLevel.OWNER_DACL);
} else {
serverSocket = new UnixDomainServerSocket(pipeName);
}

@nixel2007
Copy link
Member

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

@kuzyara
Copy link
Contributor Author

kuzyara commented Feb 11, 2025

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

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

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

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

@kuzyara kuzyara changed the title Команда stop не освобождает порт (сокет) в докере Команда stop не освобождает порт (сокет) в linux Feb 11, 2025
@kuzyara
Copy link
Contributor Author

kuzyara commented Feb 19, 2025

нужно чтобы удалялся файл /tmp/coverage41c/DefAlias_http___127.0.0.1_1550.sock

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

No branches or pull requests

2 participants