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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions