|
| 1 | +note |
| 2 | + description: "Summary description for {TCP_STREAM_SOCKET}." |
| 3 | + date: "$Date: 2015-02-16 19:53:13 +0100 (lun., 16 févr. 2015) $" |
| 4 | + revision: "$Revision: 96642 $" |
| 5 | + |
| 6 | +class |
| 7 | + TCP_STREAM_SOCKET |
| 8 | + |
| 9 | +inherit |
| 10 | + NETWORK_STREAM_SOCKET |
| 11 | + redefine |
| 12 | + make |
| 13 | + end |
| 14 | + |
| 15 | +create |
| 16 | + make_server_by_address_and_port, |
| 17 | + make_server_by_port |
| 18 | + |
| 19 | +create {NETWORK_STREAM_SOCKET} |
| 20 | + make_from_descriptor_and_address |
| 21 | + |
| 22 | +feature {NONE} -- Initialization |
| 23 | + |
| 24 | + make |
| 25 | + -- Create a network stream socket. |
| 26 | + do |
| 27 | + Precursor |
| 28 | + set_reuse_address |
| 29 | + end |
| 30 | + |
| 31 | + make_server_by_address_and_port (an_address: INET_ADDRESS; a_port: INTEGER) |
| 32 | + -- Create server socket on `an_address' and `a_port'. |
| 33 | + require |
| 34 | + valid_port: a_port >= 0 |
| 35 | + do |
| 36 | + make |
| 37 | + create address.make_from_address_and_port (an_address, a_port) |
| 38 | + bind |
| 39 | + end |
| 40 | + |
| 41 | +feature -- Basic operation |
| 42 | + |
| 43 | + send_message (a_msg: STRING) |
| 44 | + local |
| 45 | + a_package : PACKET |
| 46 | + a_data : MANAGED_POINTER |
| 47 | + c_string : C_STRING |
| 48 | + do |
| 49 | + create c_string.make (a_msg) |
| 50 | + create a_data.make_from_pointer (c_string.item, a_msg.count + 1) |
| 51 | + create a_package.make_from_managed_pointer (a_data) |
| 52 | + send (a_package, 1) |
| 53 | + end |
| 54 | + |
| 55 | +feature -- Output |
| 56 | + |
| 57 | + put_readable_string_8 (s: READABLE_STRING_8) |
| 58 | + -- Write readable string `s' to socket. |
| 59 | + local |
| 60 | + ext: C_STRING |
| 61 | + do |
| 62 | + create ext.make (s) |
| 63 | + put_managed_pointer (ext.managed_data, 0, s.count) |
| 64 | + end |
| 65 | + |
| 66 | +feature -- Status report |
| 67 | + |
| 68 | + try_ready_for_reading: BOOLEAN |
| 69 | + -- Is data available for reading from the socket right now? |
| 70 | + require |
| 71 | + socket_exists: exists |
| 72 | + local |
| 73 | + retval: INTEGER |
| 74 | + do |
| 75 | + retval := c_select_poll_with_timeout (descriptor, True, 0) |
| 76 | + Result := (retval > 0) |
| 77 | + end |
| 78 | + |
| 79 | +note |
| 80 | + copyright: "2011-2015, Javier Velilla and others" |
| 81 | + license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" |
| 82 | +end |
0 commit comments