net.select(socket_array, [ timeout ])

Check for network events (readability, writability and errors) on the provided array of Sockets, by updating their corresponding properties Socket.canread, Socket.canwrite, Socket.failed.

Parameters

socket_array

A table containing an array of Sockets to check for network events.

timeout

An optional number to indicate the maximum time for select to wait for network events, in microseconds. If that argument is not provided, the function wait until a network event occurs.

Return value

  • In case of success, returns true.
  • In case of error, returns false (you can check error message with the net.error property).
  • If no networking event occured and the time limit expired, returns nil

Example

-- Multi-connection Server example local net = require "net" -- create the server listening Socket local server = net.Socket("127.0.0.1", 5000) -- array of clients Sockets local sockets = {server} server.disconnected = false if server:bind() then print("Server running on 127.0.0.1:5000") else error("Network error : cannot create the server Socket") end while true do if net.select(sockets) == false then error("Network error : "..net.error) break end local alive_sockets = {} for client in each(sockets) do -- check for readability if client.canread then if client == server then if server.canread then -- check for new connection local newclient = server:accept() print(newclient.ip.." has connected") sockets[#sockets+1] = newclient end else local data = client:recv() if data == false then print(client.ip.." has disconnected") client.disconnected = true else print(client.ip..": "..tostring(data)) end end end -- check for error if client.failed then if client == server then error("fatal network error with server") else print(client.ip.." has encountered a fatal network error") client.disconnected = true end end if not client.disconnected then alive_sockets[#alive_sockets+1] = client end end -- keep only connected clients sockets = alive_sockets end