Skip to content

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

@kuzyara

Description

@kuzyara

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions