From: Jean Privat Date: Wed, 14 Jan 2015 01:16:51 +0000 (-0500) Subject: Merge: Websockets X-Git-Tag: v0.7.1~30 X-Git-Url: http://nitlanguage.org?hp=-c Merge: Websockets Fixed websockets with the new and improved sockets. While I'm at it, changed a bit the way it works, the old one was a bit (a lot ?) quick and dirty, so here's that. Pull-Request: #1096 Reviewed-by: Jean Privat Reviewed-by: Alexandre Terrasa --- 0c75cd6e1de56cb9b5ee22f6484fcf867c240a4a diff --combined lib/socket/socket.nit index 77acfbe,69bd449..d9bc5a3 --- a/lib/socket/socket.nit +++ b/lib/socket/socket.nit @@@ -66,11 -66,7 +66,11 @@@ class TCPStrea closed = true return end - socket.setsockopt(new NativeSocketOptLevels.socket, new NativeSocketOptNames.reuseaddr, 1) + if not socket.setsockopt(new NativeSocketOptLevels.socket, new NativeSocketOptNames.reuseaddr, 1) then + end_reached = true + closed = true + return + end var hostname = socket.gethostbyname(host) addrin = new NativeSocketAddrIn.with_hostent(hostname, port) @@@ -111,7 -107,7 +111,7 @@@ fun ready_to_read(timeout: Int): Bool do if _buffer_pos < _buffer.length then return true - if eof then return false + if end_reached then return false var events = [new NativeSocketPollValues.pollin] return pollin(events, timeout).length != 0 end @@@ -172,16 -168,15 +172,17 @@@ if closed then return if socket.close >= 0 then closed = true + end_reached = true end end # Send the data present in the socket buffer fun flush do - socket.setsockopt(new NativeSocketOptLevels.tcp, new NativeSocketOptNames.tcp_nodelay, 1) - socket.setsockopt(new NativeSocketOptLevels.tcp, new NativeSocketOptNames.tcp_nodelay, 0) + if not socket.setsockopt(new NativeSocketOptLevels.tcp, new NativeSocketOptNames.tcp_nodelay, 1) or + not socket.setsockopt(new NativeSocketOptLevels.tcp, new NativeSocketOptNames.tcp_nodelay, 0) then + closed = true + end end end @@@ -199,10 -194,7 +200,10 @@@ class TCPServe socket = new NativeSocket.socket(new NativeSocketAddressFamilies.af_inet, new NativeSocketTypes.sock_stream, new NativeSocketProtocolFamilies.pf_null) assert not socket.address_is_null - socket.setsockopt(new NativeSocketOptLevels.socket, new NativeSocketOptNames.reuseaddr, 1) + if not socket.setsockopt(new NativeSocketOptLevels.socket, new NativeSocketOptNames.reuseaddr, 1) then + closed = true + return + end addrin = new NativeSocketAddrIn.with(port, new NativeSocketAddressFamilies.af_inet) address = addrin.address diff --combined lib/standard/string.nit index f1d3288,b5cfa71..2c46179 --- a/lib/standard/string.nit +++ b/lib/standard/string.nit @@@ -1092,15 -1092,19 +1092,19 @@@ class FlatStrin from = 0 end - var realFrom = index_from + from + var new_from = index_from + from - if (realFrom + count) > index_to then return new FlatString.with_infos(items, index_to - realFrom + 1, realFrom, index_to) + if (new_from + count) > index_to then + var new_len = index_to - new_from + 1 + if new_len <= 0 then return empty + return new FlatString.with_infos(items, new_len, new_from, index_to) + end - if count == 0 then return empty + if count <= 0 then return empty - var to = realFrom + count - 1 + var to = new_from + count - 1 - return new FlatString.with_infos(items, to - realFrom + 1, realFrom, to) + return new FlatString.with_infos(items, to - new_from + 1, new_from, to) end redef fun empty do return "".as(FlatString) @@@ -2174,7 -2178,7 +2178,7 @@@ redef class Map[K,V var i = iterator var k = i.key var e = i.item - s.append("{k}{couple_sep}{e or else ""}") + s.append("{k or else ""}{couple_sep}{e or else ""}") # Concat other items i.next @@@ -2182,7 -2186,7 +2186,7 @@@ s.append(sep) k = i.key e = i.item - s.append("{k}{couple_sep}{e or else ""}") + s.append("{k or else ""}{couple_sep}{e or else ""}") i.next end return s.to_s