diff options
Diffstat (limited to 'src/tcp.c')
-rw-r--r-- | src/tcp.c | 22 |
1 files changed, 20 insertions, 2 deletions
@@ -20,6 +20,7 @@ | |||
20 | \*=========================================================================*/ | 20 | \*=========================================================================*/ |
21 | static int global_create(lua_State *L); | 21 | static int global_create(lua_State *L); |
22 | static int meth_connect(lua_State *L); | 22 | static int meth_connect(lua_State *L); |
23 | static int meth_connected(lua_State *L); | ||
23 | static int meth_listen(lua_State *L); | 24 | static int meth_listen(lua_State *L); |
24 | static int meth_bind(lua_State *L); | 25 | static int meth_bind(lua_State *L); |
25 | static int meth_send(lua_State *L); | 26 | static int meth_send(lua_State *L); |
@@ -45,6 +46,7 @@ static luaL_reg tcp[] = { | |||
45 | {"bind", meth_bind}, | 46 | {"bind", meth_bind}, |
46 | {"close", meth_close}, | 47 | {"close", meth_close}, |
47 | {"connect", meth_connect}, | 48 | {"connect", meth_connect}, |
49 | {"connected", meth_connected}, | ||
48 | {"dirty", meth_dirty}, | 50 | {"dirty", meth_dirty}, |
49 | {"getfd", meth_getfd}, | 51 | {"getfd", meth_getfd}, |
50 | {"getpeername", meth_getpeername}, | 52 | {"getpeername", meth_getpeername}, |
@@ -113,12 +115,12 @@ static int meth_receive(lua_State *L) { | |||
113 | } | 115 | } |
114 | 116 | ||
115 | static int meth_getstats(lua_State *L) { | 117 | static int meth_getstats(lua_State *L) { |
116 | p_tcp tcp = (p_tcp) aux_checkgroup(L, "tcp{any}", 1); | 118 | p_tcp tcp = (p_tcp) aux_checkclass(L, "tcp{client}", 1); |
117 | return buf_meth_getstats(L, &tcp->buf); | 119 | return buf_meth_getstats(L, &tcp->buf); |
118 | } | 120 | } |
119 | 121 | ||
120 | static int meth_setstats(lua_State *L) { | 122 | static int meth_setstats(lua_State *L) { |
121 | p_tcp tcp = (p_tcp) aux_checkgroup(L, "tcp{any}", 1); | 123 | p_tcp tcp = (p_tcp) aux_checkclass(L, "tcp{client}", 1); |
122 | return buf_meth_setstats(L, &tcp->buf); | 124 | return buf_meth_setstats(L, &tcp->buf); |
123 | } | 125 | } |
124 | 126 | ||
@@ -224,6 +226,22 @@ static int meth_connect(lua_State *L) | |||
224 | return 1; | 226 | return 1; |
225 | } | 227 | } |
226 | 228 | ||
229 | static int meth_connected(lua_State *L) | ||
230 | { | ||
231 | static t_tm tm = {-1, -1}; | ||
232 | p_tcp tcp = (p_tcp) aux_checkclass(L, "tcp{master}", 1); | ||
233 | int err = sock_connected(&tcp->sock, &tm); | ||
234 | if (err != IO_DONE) { | ||
235 | lua_pushnil(L); | ||
236 | lua_pushstring(L, sock_strerror(err)); | ||
237 | return 2; | ||
238 | } | ||
239 | /* turn master object into a client object */ | ||
240 | aux_setclass(L, "tcp{client}", 1); | ||
241 | lua_pushnumber(L, 1); | ||
242 | return 1; | ||
243 | } | ||
244 | |||
227 | /*-------------------------------------------------------------------------*\ | 245 | /*-------------------------------------------------------------------------*\ |
228 | * Closes socket used by object | 246 | * Closes socket used by object |
229 | \*-------------------------------------------------------------------------*/ | 247 | \*-------------------------------------------------------------------------*/ |