Timeout makes it too easy to write crappy code.
It's also much easier to handle EINTR without timeout.
This fixes a minor bug: revents was undefined if poll() failed.
static int vlclua_net_poll( lua_State *L )
{
luaL_checktype( L, 1, LUA_TTABLE );
- double f_timeout = luaL_optnumber( L, 2, -1. );
int i_fds = 0;
lua_pushnil( L );
i++;
}
- int i_ret = poll( p_fds, i_fds, f_timeout < 0. ? -1 : (int)(f_timeout*1000) );
+ int i_ret;
+ do
+ i_ret = poll( p_fds, i_fds, -1 );
+ while( i_ret == -1 );
+
for( i = 0; i < i_fds; i++ )
{
lua_pushinteger( L, p_fds[i].fd );
net.close( fd ): Close file descriptor.
net.send( fd, string, [length] ): Send data on fd.
net.recv( fd, [max length] ): Receive data from fd.
-net.poll( { fd = events }, [timeout in seconds] ): Implement poll function.
+net.poll( { fd = events } ): Implement poll function.
Returns the numbers of file descriptors with a non 0 revent. The function
modifies the input table to { fd = revents }. See "man poll".
net.POLLIN/POLLPRI/POLLOUT/POLLRDHUP/POLLERR/POLLHUP/POLLNVAL: poll event flags
end
end
- local ret = vlc.net.poll( pollfds, timeout or -1 )
+ local ret = vlc.net.poll( pollfds )
local wclients = {}
local rclients = {}
if ret > 0 then