aboutsummaryrefslogtreecommitdiff
path: root/src/tcp.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tcp.c')
-rw-r--r--src/tcp.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/tcp.c b/src/tcp.c
index 0b3706b..3a84191 100644
--- a/src/tcp.c
+++ b/src/tcp.c
@@ -20,6 +20,7 @@
20\*=========================================================================*/ 20\*=========================================================================*/
21static int global_create(lua_State *L); 21static int global_create(lua_State *L);
22static int meth_connect(lua_State *L); 22static int meth_connect(lua_State *L);
23static int meth_connected(lua_State *L);
23static int meth_listen(lua_State *L); 24static int meth_listen(lua_State *L);
24static int meth_bind(lua_State *L); 25static int meth_bind(lua_State *L);
25static int meth_send(lua_State *L); 26static 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
115static int meth_getstats(lua_State *L) { 117static 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
120static int meth_setstats(lua_State *L) { 122static 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
229static 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\*-------------------------------------------------------------------------*/