diff --git a/src/crystal/system/unix/socket.cr b/src/crystal/system/unix/socket.cr index 222ec7216fb9..345f3caedc47 100644 --- a/src/crystal/system/unix/socket.cr +++ b/src/crystal/system/unix/socket.cr @@ -105,7 +105,7 @@ module Crystal::System::Socket LibC.recvfrom(fd, slice, slice.size, 0, sockaddr, pointerof(addrlen)) end - {bytes_read, sockaddr, addrlen} + {bytes_read, ::Socket::Address.from(sockaddr, addrlen)} end private def system_close_read diff --git a/src/crystal/system/win32/socket.cr b/src/crystal/system/win32/socket.cr index 88278544dbf0..18b3407206a8 100644 --- a/src/crystal/system/win32/socket.cr +++ b/src/crystal/system/win32/socket.cr @@ -299,7 +299,7 @@ module Crystal::System::Socket {ret, bytes_received} end - {bytes_read.to_i32, sockaddr, addrlen} + {bytes_read.to_i32, ::Socket::Address.from(sockaddr, addrlen)} end private def system_close_read diff --git a/src/socket.cr b/src/socket.cr index bce572624743..37cf03d77754 100644 --- a/src/socket.cr +++ b/src/socket.cr @@ -255,11 +255,10 @@ class Socket < IO def receive(max_message_size = 512) : {String, Address} address = nil message = String.new(max_message_size) do |buffer| - bytes_read, sockaddr, addrlen = system_receive(Slice.new(buffer, max_message_size)) - address = Address.from(sockaddr, addrlen) + bytes_read, address = system_receive(Slice.new(buffer, max_message_size)) {bytes_read, 0} end - {message, address.not_nil!} + {message, address.as(Address)} end # Receives a binary message from the previously bound address. @@ -274,8 +273,7 @@ class Socket < IO # bytes_read, client_addr = server.receive(message) # ``` def receive(message : Bytes) : {Int32, Address} - bytes_read, sockaddr, addrlen = system_receive(message) - {bytes_read, Address.from(sockaddr, addrlen)} + system_receive(message) end # Calls `shutdown(2)` with `SHUT_RD` diff --git a/src/socket/udp_socket.cr b/src/socket/udp_socket.cr index 86132c54d0c7..9175b787cfe9 100644 --- a/src/socket/udp_socket.cr +++ b/src/socket/udp_socket.cr @@ -70,11 +70,10 @@ class UDPSocket < IPSocket def receive(max_message_size = 512) : {String, IPAddress} address = nil message = String.new(max_message_size) do |buffer| - bytes_read, sockaddr, addrlen = system_receive(Slice.new(buffer, max_message_size)) - address = IPAddress.from(sockaddr, addrlen) + bytes_read, address = system_receive(Slice.new(buffer, max_message_size)) {bytes_read, 0} end - {message, address.not_nil!} + {message, address.as(IPAddress)} end # Receives a binary message from the previously bound address. @@ -89,8 +88,8 @@ class UDPSocket < IPSocket # bytes_read, client_addr = server.receive(message) # ``` def receive(message : Bytes) : {Int32, IPAddress} - bytes_read, sockaddr, addrlen = system_receive(message) - {bytes_read, IPAddress.from(sockaddr, addrlen)} + bytes_read, address = system_receive(message) + {bytes_read, address.as(IPAddress)} end # Reports whether transmitted multicast packets should be copied and sent