From ac2be5636fe881bf5ff14cf5d1c4a85affa0aebc Mon Sep 17 00:00:00 2001 From: Juan Wajnerman <jwajnerman@manas.com.ar> Date: Wed, 20 Aug 2014 21:55:32 -0300 Subject: [PATCH] Use SO_REUSEADDR for TCP server (until a better aproach is implemented to make development easier) --- src/socket/socket.cr | 3 +++ src/socket/tcp_server.cr | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/socket/socket.cr b/src/socket/socket.cr index f81b17513e..982c56843e 100644 --- a/src/socket/socket.cr +++ b/src/socket/socket.cr @@ -38,8 +38,11 @@ lib C fun accept(fd : Int32, addr : SockAddrIn*, addr_len : Int32*) : Int32 fun connect(fd : Int32, addr : SockAddrIn*, addr_len : Int32) : Int32 fun gethostbyname(name : UInt8*) : HostEnt* + fun setsockopt(sock : Int32, level : Int32, opt : Int32, optval : Void*, optlen : Int32) : Int32 SOCK_STREAM = 1 + SOL_SOCKET = 0xffff + SO_REUSEADDR = 0x0004 end require "./*" diff --git a/src/socket/tcp_server.cr b/src/socket/tcp_server.cr index f568dafd29..898d5dd218 100644 --- a/src/socket/tcp_server.cr +++ b/src/socket/tcp_server.cr @@ -2,6 +2,9 @@ class TCPServer def initialize(port, backlog = 128) @sock = C.socket(C::AF_INET, C::SOCK_STREAM, 0) + optval = 1 + C.setsockopt(@sock, C::SOL_SOCKET, C::SO_REUSEADDR, pointerof(optval) as Void*, sizeof(Int32)) + addr = C::SockAddrIn.new addr.family = C::AF_INET addr.addr = 0_u32 -- GitLab