diff --git a/eo-runtime/src/main/java/EOorg/EOeolang/EOsys/Posix/InetAddrSyscall.java b/eo-runtime/src/main/java/EOorg/EOeolang/EOsys/Posix/InetAddrSyscall.java index be31d96d84..405c6a50b9 100644 --- a/eo-runtime/src/main/java/EOorg/EOeolang/EOsys/Posix/InetAddrSyscall.java +++ b/eo-runtime/src/main/java/EOorg/EOeolang/EOsys/Posix/InetAddrSyscall.java @@ -56,7 +56,11 @@ public Phi make(final Phi... params) { final Phi result = this.posix.take("return").copy(); result.put( 0, - new Data.ToPhi(CStdLib.INSTANCE.inet_addr(new Dataized(params[0]).asString())) + new Data.ToPhi( + Integer.reverseBytes( + CStdLib.INSTANCE.inet_addr(new Dataized(params[0]).asString()) + ) + ) ); result.put(1, new PhDefault()); return result; diff --git a/eo-runtime/src/main/java/EOorg/EOeolang/EOsys/Win32/InetAddrFuncCall.java b/eo-runtime/src/main/java/EOorg/EOeolang/EOsys/Win32/InetAddrFuncCall.java index c0df8955ed..dbec426002 100644 --- a/eo-runtime/src/main/java/EOorg/EOeolang/EOsys/Win32/InetAddrFuncCall.java +++ b/eo-runtime/src/main/java/EOorg/EOeolang/EOsys/Win32/InetAddrFuncCall.java @@ -59,7 +59,11 @@ public Phi make(final Phi... params) { final Phi result = this.win.take("return").copy(); result.put( 0, - new Data.ToPhi(Winsock.INSTANCE.inet_addr(new Dataized(params[0]).asString())) + new Data.ToPhi( + Integer.reverseBytes( + Winsock.INSTANCE.inet_addr(new Dataized(params[0]).asString()) + ) + ) ); result.put(1, new PhDefault()); return result; diff --git a/eo-runtime/src/test/eo/org/eolang/sys/posix-tests.eo b/eo-runtime/src/test/eo/org/eolang/sys/posix-tests.eo index 24741f1754..c999c27910 100644 --- a/eo-runtime/src/test/eo/org/eolang/sys/posix-tests.eo +++ b/eo-runtime/src/test/eo/org/eolang/sys/posix-tests.eo @@ -73,3 +73,13 @@ "close" * sd -1 + +# Test. +[] > returns-valid-posix-inet-addr-for-localhost + code. > addr + posix + "inet_addr" + * "127.0.0.1" + or. > @ + os.is-windows + addr.eq 2130706433 diff --git a/eo-runtime/src/test/eo/org/eolang/sys/win32-tests.eo b/eo-runtime/src/test/eo/org/eolang/sys/win32-tests.eo index 38770dd231..e14ebdacff 100644 --- a/eo-runtime/src/test/eo/org/eolang/sys/win32-tests.eo +++ b/eo-runtime/src/test/eo/org/eolang/sys/win32-tests.eo @@ -43,3 +43,13 @@ and. called.code called.output.eq msg.size + +# Test. +[] > returns-valid-win32-inet-addr-for-localhost + code. > addr + win32 + "inet_addr" + * "127.0.0.1" + or. > @ + os.is-windows.not + addr.eq 2130706433 diff --git a/eo-runtime/src/test/java/EOorg/EOeolang/EOnet/EOsocketTest.java b/eo-runtime/src/test/java/EOorg/EOeolang/EOnet/EOsocketTest.java index 3e127ea3d2..f0d571e3bf 100644 --- a/eo-runtime/src/test/java/EOorg/EOeolang/EOnet/EOsocketTest.java +++ b/eo-runtime/src/test/java/EOorg/EOeolang/EOnet/EOsocketTest.java @@ -64,7 +64,7 @@ final class EOsocketTest { /** * Localhost IP. */ - private static String LOCALHOST = "127.0.0.1"; + private static final String LOCALHOST = "127.0.0.1"; @Test @DisabledOnOs(OS.WINDOWS) @@ -79,7 +79,7 @@ void connectsToLocalServerViaPosixSyscall() throws IOException { final SockaddrIn addr = new SockaddrIn( (short) CStdLib.AF_INET, EOsocketTest.htons(8080), - CStdLib.INSTANCE.inet_addr(EOsocketTest.LOCALHOST) + Integer.reverseBytes(CStdLib.INSTANCE.inet_addr(EOsocketTest.LOCALHOST)) ); final int connected = CStdLib.INSTANCE.connect(socket, addr, addr.size()); final String error; @@ -107,7 +107,7 @@ void connectsToLocalServerViaWindowsSyscall() throws IOException { assert Winsock.INSTANCE.WSAStartup( Winsock.WINSOCK_VERSION_2_2, new WSAStartupFuncCall.WSAData() - ) > 0; + ) == 0; final int socket = Winsock.INSTANCE.socket( Winsock.AF_INET, Winsock.SOCK_STREAM, @@ -117,7 +117,7 @@ void connectsToLocalServerViaWindowsSyscall() throws IOException { final SockaddrIn addr = new SockaddrIn( (short) Winsock.AF_INET, EOsocketTest.htons(8080), - Winsock.INSTANCE.inet_addr(EOsocketTest.LOCALHOST) + Integer.reverseBytes(Winsock.INSTANCE.inet_addr(EOsocketTest.LOCALHOST)) ); final int connected = Winsock.INSTANCE.connect(socket, addr, addr.size()); final int error;